SQL aliassen opvragen via fetch_assoc() mogelijk?
"users":
id (primaire sleutel)
name
"customers":
id (primaire sleutel)
company
address
zipcode
city
"performances":
id (primaire sleutel)
userId (vreemde sleutel van tbl users)
customerId (vreemde sleutel van tbl customers)
begin
end
Ik wil nu graag een query uitvoeren om gegevens in één keer uit die drie tabellen te halen. Ik werk met joins en aliases, maar momenteel ondervind ik een probleem bij het weergeven van m'n resultatenset. Hier is m'n code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
$connection = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
if(mysqli_connect_errno()) {
trigger_error('Fout in verbinding: ' . $connection->error);
}
$sql = "SELECT *, DATE_FORMAT(date, '%d/%m/%y') AS date FROM users AS u RIGHT JOIN (performances AS p LEFT JOIN customers AS c ON p.customerId = c.id) ON u.id = c.id ORDER BY p.id DESC";
if(!$result = $connection->query($sql)){
trigger_error('Fout in query: ' . $connection->error);
}else{
while($row = $result->fetch_assoc()){
echo '<tr title="' . $row[p.description] . '">';
echo '<td><a href="#" title=""><img src="/images/edit.png" alt="Wijzig" title="Wijzig" /></a></td>';
echo '<td>' . $row[p.date] . '</td>';
echo '<td>' . $row[c.company] . '</td>';
echo '<td>' . $row[u.id] . '</td>';
echo '<td>' . substr($row[p.description], 0, 70) . '...</td>';
echo '<td></td>';
echo '</tr>';
}
}
?>
$connection = new mysqli(MYSQL_SERVER,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
if(mysqli_connect_errno()) {
trigger_error('Fout in verbinding: ' . $connection->error);
}
$sql = "SELECT *, DATE_FORMAT(date, '%d/%m/%y') AS date FROM users AS u RIGHT JOIN (performances AS p LEFT JOIN customers AS c ON p.customerId = c.id) ON u.id = c.id ORDER BY p.id DESC";
if(!$result = $connection->query($sql)){
trigger_error('Fout in query: ' . $connection->error);
}else{
while($row = $result->fetch_assoc()){
echo '<tr title="' . $row[p.description] . '">';
echo '<td><a href="#" title=""><img src="/images/edit.png" alt="Wijzig" title="Wijzig" /></a></td>';
echo '<td>' . $row[p.date] . '</td>';
echo '<td>' . $row[c.company] . '</td>';
echo '<td>' . $row[u.id] . '</td>';
echo '<td>' . substr($row[p.description], 0, 70) . '...</td>';
echo '<td></td>';
echo '</tr>';
}
}
?>
Ik krijg blijkbaar niets van gegevens te zien wanneer ik die aliassen in m'n php code probeer op te roepen (ook geen foutmeldingen). Wat doe ik dan verkeerd? Zijn die aliassen opvraagbaar via de fetch_assoc() functie?
Alvast bedankt voor jullie reactie(s)!
begin met je SQL te verbeteren, doe geen SELECT * maar schrijf de gewenste attributen goed uit met een alias erachter. Test je query eerst uit met een CLI of phpadmin oid en bouw dan verder.
array.
Je moet niet * gebruiken, vraag alle velden op.
Kan je niet gewoon gebruik maken van twee inner joins?
Leer php: Je moet niet * gebruiken, vraag alle velden op.
Kan je niet gewoon gebruik maken van twee inner joins?
Pim de Haan op 04/10/2010 14:41:47:
Wat geeft
Een reeks warnings ;)
Warning: mysql_query() [function.mysql-query]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /opt/www/vandenbogaerde/web/uren.visueel-adv.be/overview.php on line 41
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /opt/www/vandenbogaerde/web/uren.visueel-adv.be/overview.php on line 41
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /opt/www/vandenbogaerde/web/uren.visueel-adv.be/overview.php on line 41
Warning: array_keys() [function.array-keys]: The first argument should be an array in /opt/www/vandenbogaerde/web/uren.visueel-adv.be/overview.php on line 41
@ John D & Karl Karl: uit jullie reactie leidt ik af dat ik dus gewoon het sterretje moet veranderen door bijvoorbeeld:
user.id AS userID, user.firstname AS userFirstname, performances.id AS performancesID, enz...
Ik probeer dit nu alvast eens uit en ben uiterst benieuwd naar het resultaat! Thx!
Ja, selecteer wat je wilt hebben. In principe hoeft een database niet alle velden terug te geven als je * gebruikt aangezien het een wildcard is. Verder is SQL een self documenting language. Door naar de query te kijken kan je al zien wat er opgevraagd word. Dit helpt ook weer bij het php gedeelte.
$sql = "SELECT
users.id AS userId,
users.firstname AS userFirstname,
users.lastname AS userLastname,
performances.userId AS performanceUserId,
DATE_FORMAT(date, '%d/%m/%y') AS performaceDate,
performances.description AS performanceDescription,
customers.id AS customerId,
customers.company AS customerCompany
FROM
users
RIGHT JOIN
(performances LEFT JOIN customers ON performances.customerId = customers.id)
ON
performances.userId = users.id
";