Simple MySQL-Abfrage tuts nicht - ich werd bekloppt!

Quests Sohn

Mitglied
Hallo Forum,

ich habe eine normale MySQL DB Abfrage geschrieben.
Die funktioniert auch soweit, es gibt keine Fehlermeldung.
Das Ergebnis ist aber einfach falsch, entspricht also nicht dem DB-Inhalt:



Die betroffenen DB-Tabellen beinhalten:

tabelle_r: "rid", "pid", "name", ..., "status"
tabelle_p: "pid", "text", ..., "status"



Die Abfrage lautet:

PHP:
$result = mysql_query("SELECT * FROM tabelle_r r LEFT JOIN tabelle_p p USING (pid) WHERE p.mid = '$m[mid]' AND p.status = '1' AND r.status > '0'"); while($array = mysql_fetch_array($result)) { echo $array[status]."\n"; }



Der Inhalt der betroffenen DB-Tabellen:

tabelle_r:
- "1", "1", "test", ..., "1"
- "2", "1", "test2", ..., "2"

tabelle_p:
- "1", "mustertext", ..., "1"



Ich habe erwartet, dass die Ausgabe wie folgt aussieht:
1
2

Leider ist das Ergebnis aber:
1
1


Was mache ich falsch? Ich begreife es einfach nicht ...
 
Hi

was steckt denn hinter $m[mid]?

Evtl. liegt es hieran

r.status > '0'

Eine 0 in Hochkomma gesetzt gibt meines Wissens einen String aus. Verbunden mit Vergleichsoperatoren könnte es da nicht funktionieren. Nimm einfach mal die Hochkomma weg.
 
Hi Luzie,

die Variable $m[mid] ist unwichtig für die Abfrage. Sie ist der
Primärschlüssel einer weiteren Tabelle und hier Fremdschlüssel.

Das mit der Null (0) ohne Hochkommata habe ich ausprobiert.
Das Ergebnis bleibt unverändert falsch.

Ich verstehe einfach nicht, wie eine Wert, der ganz eindeutig "2"
ist als "1" ausgegeben werden kann. Das gibt es doch nicht :mad:
 
Schau doch nochmal ganz genau nach, ob Du nicht etwas eine anderes Feld ausgibst, es sind einfach so dumme Flüchtigkeitsfehler, auf die man manchmal gar nicht kommt, weil man es nicht vermutet.

z.B. kann eine Variable nach irgendeiner Aktion einen vollkommen anderen Wert haben.

hast Du die Abfrage mal in phpmyadmin gesetzt?

Was ist mit Klammern?

and (p.status = '1' AND r.status > '0')
 
Hallo,
fehlt da nicht was?
Code:
SELECT * 
  FROM tabelle_r r LEFT JOIN tabelle_p p USING (pid) ON Abhängigkeit
  WHERE p.mid = '$m[mid]' AND p.status = '1' AND r.status > '0'
 
WieGehts hat gesagt.:
Hallo,
fehlt da nicht was?
Code:
SELECT * 
  FROM tabelle_r r LEFT JOIN tabelle_p p USING (pid) ON Abhängigkeit
  WHERE p.mid = '$m[mid]' AND p.status = '1' AND r.status > '0'

Hi

meines Wissens ersetzt USING() das ON tab1.feld=tab2.feld, wenn die Spaltennamen beider Tabellen gleich sind. ;)
 
Zuletzt bearbeitet:
Zurück