SQL aliassen opvragen via fetch_assoc() mogelijk?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sam Clauw

Sam Clauw

04/10/2010 14:20:19
Quote Anchor link
Ik val meteen met de deur in huis om m'n probleem uit te leggen. Drie databases ik ik ter beschikking:

"users":
id (primaire sleutel)
name
e-mail

"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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
    }
}

    
?>


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)!
 
PHP hulp

PHP hulp

24/04/2024 06:16:14
 
John D

John D

04/10/2010 14:28:02
Quote Anchor link
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.
 

04/10/2010 14:30:15
Quote Anchor link
Leer php: array.
Je moet niet * gebruiken, vraag alle velden op.
Kan je niet gewoon gebruik maken van twee inner joins?
 
Pim -

Pim -

04/10/2010 14:41:47
Quote Anchor link
Wat geeft
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php print_r( array_keys( mysql_fetch_assoc( mysql_query( $sql ) ) ) ); ?>
 
Sam Clauw

Sam Clauw

04/10/2010 14:51:40
Quote Anchor link
Pim de Haan op 04/10/2010 14:41:47:
Wat geeft
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php print_r( array_keys( mysql_fetch_assoc( mysql_query( $sql ) ) ) ); ?>

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!
 

04/10/2010 14:54:33
Quote Anchor link
Je hebt hierboven vast alleen Pim's code gebruikt? Dan is het logisch dat je die foutmeldingen krijgt.
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.
 
Sam Clauw

Sam Clauw

04/10/2010 15:50:55
Quote Anchor link
Ok, bedankt iedereen! Mijn SQL blijkt te werken, super!!! Dit is m'n opgebouwde SQL:

$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
";
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.