php Abfrage in mysql Abfrage

G.P.

Legendäres Mitglied
An sich nichts schweres, aber mir ist gerade entfallen, wie ich es machen kann.

$sql = 'SELECT t.birne, u.apfel FROM test t, test2 u WHERE ...";

Bei der Where Bedingung soll jetzt im Prinzip folgendes stehen.
Wenn u.apfel > 0 ist, soll t.birne auch gleich u.apfel sein.
Wenn u.apfel = 0 ist, soll diese bedingung nicht eingefuegt werden.

Ich hoffe mir kann jemand weiterhelfen. Hab irgendwie gerade nen Blackout.

MfG
GP
 
...where u.apfel > 0 and t.birne = u.apfel

wenn u.apfel = 0 wird das and eh nicht mehr ausgewertet
 
?????

Warum nicht?
u.apfel ist ein einfach Integer.
Null ist eine normale Belegung.

Die Abfrage soll also in etwa so aussehen
(u.apfel > 0) u.apfel = a.birne

Aber wie mache ich das?

MfG
GP
 
huh?

where
(apfel > 0 and apfel = birne)
or
apfel = 0

aber so einfach kann es doch nicht sein, oder?
 
...
doch es ist so einfach ..
naja, wie gesagt hatt nen blackout
wink.gif

danke fuer den Hinweis

MfG
GP
 
Ich halte das .. or apfel = 0 für unsinnig.
Wenn eine Bedingung x > 0 wahr ist, dann impliziert das x != 0.
 
es impliziert x != 0 oder x < 0

Er wollte doch, dass wenn apfel > 0, birne = apfel *und* wenn apfel = 0 dass birne nicht gecheckt wird, aber die apfel = 0 records sollen in das resultset kommen.
Das impliziert, dass seine Query für Apfel < 0 keine Antworten liefern soll, was bei dir mit apfel != 0 aber der Fall wäre.
 
CODE
$sql = 'SELECT t.birne, u.apfel FROM test t, test2 u WHERE ...";


Der Code hier ist relativ unschön, weil theoretisch eine Einschränkung auf einem kartesischen Produkt stattfindet.

Da sollte man mit JOINs arbeiten:

CODE
SELECT t.birne, u.apfel
FROM test t
INNER JOIN test2 u
ON ((t.birne = u.apfel) AND (u.apfel > 0) OR (u.apfel = 0));



SQL Mässig entspricht das der gewünschten Beschreibung, aber das ganze Macht logisch doch gar kein Sinn!?

So würde es sinn Machen...

CODE
SELECT t.birne, u.apfel
FROM test t
INNER JOIN test2 u
ON (t.birne = u.apfel)
WHERE (...)




QUOTE
Wenn u.apfel = 0 ist, soll diese bedingung nicht eingefuegt werden.



Also wenn u.apfel = 0 dann soll es die zwei Datensätze verknüpfen!? -> Das macht keinen Sinn...
 
Keine Ahnung ob ich die Frage richtig verstanden habe, aber ich poste mal einfach was :)

CODE
SELECT t.birne, u.apfel
FROM test t
LEFT JOIN test2 u ON t.birne=u.apfel
WHERE u.apfel > 0



 
Es funktioniert zwar auch mit den komischen Code, welchen ich gepostet habe, aber natuerlich ist Join besser.

also, was lerne ich aus diesem Thread?
Nach Wodka nicht mehr ueber PHP/MySQL nachdenken sondern lieber bis zum naechsten Tag warten
wink.gif


MfG
GP
 
Hmm, trotz allem hab ich noch ein Problem

Ich nutze folgenden Code:

CODE $sql = "SELECT p.* , u.*, pt.*, pr.*
FROM " . POSTS_TABLE . " p, " . USERS_TABLE . " u, " . POSTS_TEXT_TABLE . " pt
LEFT JOIN " . PREMIUM_TABLE . " pr ON pr.id_premium = p.id_posts
WHERE $limits";


Als Fehlermeldung wird mir folgendes ausgegeben:

SQL Error : Unknown column 'p.id_posts' in 'on clause'

Diese Tabelle existiert aber definitiv..
Hab ich da irgend etwas falsch gemacht?

EDIT:
Fehler gefunden
wink.gif

POST_Table ,muss einfach nur unmittelbar vor der Join Abfrage abgefragt werden, hatte ich vergessen
wink.gif
 
Zurück
Oben