Sven: MySQL: Spalte lässt sich nicht abrufen

Hallo ihr,

ich hab eine Join-Abfrage, und das merkwürdige ist: Wenn ich die Abfrage in PhpMyAdmin eingebe und ausführen lasse, ist die Ergebnistabelle wie erwünscht. Auch ein Feld "musik" wird mit Inhalt angezeigt.

Wenn ich nun diese Abfrage 1:1 in mein eigenes PHP-Skript kopiere, kann ich alle Felder ansprechen - außer das Feld "musik".

Hier die Abfrage:

SELECT A.*, B.*, C.*, D.*  
FROM login AS A  
JOIN udata AS B  
JOIN interests AS C  
JOIN settings AS D ON A.id = '1'  
AND B.id = A.id  
AND C.id = A.id  
AND D.id = A.id  
LIMIT 1

Und hier Code meines PHP-Skripts:

$sql = "SELECT A.*, B.*, C.*, D.*  
FROM login AS A  
JOIN udata AS B  
JOIN interests AS C  
JOIN settings AS D ON A.id = '1'  
AND B.id = A.id  
AND C.id = A.id  
AND D.id = A.id  
LIMIT 1";  
$res = mysql_query($sql);  
while($row = mysql_fetch_array($res))  
{  
 echo $row['musik']; // Es wird kein Inhalt angezeigt  
 echo $row['anderesFeld']; // Hier klappt es einwandfrei, obwohl beide Felder der gleichen Tabelle entstammen  
}

Hat da jemand eine Idee? Ist ja schon merkwürdig, denn über PHPMyAdmin haben alle Felder ihren Wert.

Gruß
Sven

  1. Hi,

    while($row = mysql_fetch_array($res))
    {
    echo $row['musik']; // Es wird kein Inhalt angezeigt
    echo $row['anderesFeld']; // Hier klappt es einwandfrei, obwohl beide Felder der gleichen Tabelle entstammen

    Und var_dump eines mittels mysql_fetch_array geholten Datensatzes ergibt was?

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
  2. yo,

    SELECT A., B., C., D.

    FROM login AS A
    JOIN udata AS B
    JOIN interests AS C
    JOIN settings AS D ON A.id = '1'
    AND B.id = A.id
    AND C.id = A.id
    AND D.id = A.id
    LIMIT 1

      
    schlechtter sql code, zum einen sehe ich nicht den sinn, jede tabelle mit den alias-namen und \* auszugeben, wenn schon alle zeilen, warum dann nicht gleich mit einem einzigen \* ?  
      
    ausserdem verzichte bitte auf das AS bei alisnamen für eine tabelle, nicht jedes dbms kann damit umgehen, es ist unnötig und bläst den code nur auf.  
      
    zuletzt ist es immer ratsam, eine explizite join syntax zu benutzen, wo die join bedingungen gleich hinter dem join in der ON klausel stehen. erspart langes suchen.  
      
    SELECT \*  
    FROM login A  
    JOIN INNER udata B ON B.id = A.id  
    JOIN INNER interests C ON C.id = A.id  
    JOIN INNNER settings D ON D.id = A.id  
    WHERE A.id = '1'  
    LIMIT 1  
      
    und kurz zu deinem problem, eine tabelle ist per definition eine unsortierte menge, sprich mit den LIMIT 1 kannst du unterschiedliche datensätze bekommen, die sich dann inhaltlich unterscheiden. willst du immer den gleichen datensatz haben, dann sortiere nach einem eindeutigen kriterium, bevor du LIMIT einsetzt. eventuell löst sich damit dein problem, aber das ist eine vermutung.  
      
    Ilja