IF in WHERE Abfrage
Dennis 2
- datenbank
Ich habe eine PHP Varibale
$staat=12;
Nun möchte ich diese in einer SELECT Abfrage abfragen, wenn Sie Vorhanden, also grösser als 0 ist.
SELECT * FROM table WHERE (IF '$staat'>0 THEN staat='$staat')
doch irgendwas mache ich da falsch?
Dennis
Ich habe eine PHP Varibale
$staat=12;
Nun möchte ich diese in einer SELECT Abfrage abfragen, wenn Sie Vorhanden, also grösser als 0 ist.
SELECT * FROM table WHERE (IF '$staat'>0 THEN staat='$staat')
doch irgendwas mache ich da falsch?
NACHTRAG:
-----------------------------------------------------------------------
SELECT * FROM table WHERE IF('$staat'>0, staat='$staat', 0)
Funktioniert (fast) nur wird wenn $staat>0 nicht zutriff eine 0 bearbeitet, es soll aber NIX bearbeitet werden...
Wie kann ich meiner Anweisung das klarmachen.
Dennis
Hi,
warum willst du denn überhaupt einen Wert, den du bereits in PHP vorliegen hast, noch mal von der Datenbank selektieren lassen?
SELECT * FROM table WHERE IF('$staat'>0, staat='$staat', 0)
Funktioniert (fast) nur wird wenn $staat>0 nicht zutriff eine 0 bearbeitet, es soll aber NIX bearbeitet werden...
Von was für einer „Bearbeitung“ redest du denn hier?
MfG ChrisB
Hello,
SELECT * FROM table WHERE IF('$staat'>0, staat='$staat', 0)
Funktioniert (fast) nur wird wenn $staat>0 nicht zutriff eine 0 bearbeitet, es soll aber NIX bearbeitet werden...
Soll keine Abfrage duchgeführt werden, oder nicht gefiltert werden, wenn $staat == 0 ist?
Die erste Möglichkeit liefert gar kein Ergbebnis, die zweite alle Datensätze, vobehaltlich, dass es keine weiteren Filter mehr gibt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Soll keine Abfrage duchgeführt werden, oder nicht gefiltert werden, wenn $staat == 0 ist?
Wenn $staat grösser als 0 ist soll gefiltert werden, wenn staat==0 ist soll der Filter staat weggelassen werden, als sei er nicht vorhanden und der Rest ausgegeben werden.
Hello,
Soll keine Abfrage duchgeführt werden, oder nicht gefiltert werden, wenn $staat == 0 ist?
Wenn $staat grösser als 0 ist soll gefiltert werden, wenn staat==0 ist soll der Filter staat weggelassen werden, als sei er nicht vorhanden und der Rest ausgegeben werden.
Na, dann hast Du ja von mir zwei Lösungswege bekommen:
https://forum.selfhtml.org/?t=217285&m=1492038
Da fehlte noch irgenwo eine Klammer } , aber das findest du bestimmt selber :-)
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Ich habe eine PHP Varibale
$staat=12;Nun möchte ich diese in einer SELECT Abfrage abfragen, wenn Sie Vorhanden, also grösser als 0 ist.
SELECT * FROM table WHERE (IF '$staat'>0 THEN staat='$staat')
doch irgendwas mache ich da falsch?
Gemessen an deiner Beschreibung ist dir nicht so ganz klar, was du wirklich möchtest.
Vorneweg: Dass eine Variable vorhanden ist und der Umstand, dass ihr Wert größer als Null ist, sind zwei völlig unterschiedliche Paar Schuhe. Eine Variable ist auch vorhanden, wenn ihr Wert gleich Null oder kleiner Null ist. Sie kann, je nach Definition, sogar vorhanden sein, wenn sie gar keinen Wert hat.
Deinem SQL-Befehl verstehe ich nicht wirklich. Möchtest du alle Zeilen auslesen, deren Spalte staat dem Wert der PHP-Variablen $staat entspricht, vorausgesetzt, $staat ist größer als Null? Dann:
if ($staat > 0) {
machsql("SELECT * FROM table WHERE staat='$staat');
}
Du brauchst nicht zum Bäcker zu fahren, wenn du eh keine Brötchen haben möchtest. Genauso brauchst du nicht die Datenbank bemühen, wenn du eh nichts haben willst, weil $staat kleiner oder gleich Null ist.
(Davon unabhängig möchtest du dich informieren, wie Variablen in SQL eingebettet werden. So, wie du und ich das da oben gemacht haben, ist das eigentlich bäh!.)
Lieber Karl-Franz zu Ferdinand von und bei Dümpelshofen,
in meienr Tabelle ist die Spalte staat
if, titel, staat, stadt
--------------------------------
1 hallo 2 5
2 huhuh 2 4
2 hihih 1 4
ich möchte entweder alle
SELECT * FROM table
oder eben wenn die Variablen staat bzw. stadt einen Wert haben nur diese übereinstimmenden
deshalb die IF abfrage
SELECT * FROM table WHERE staat=2
dann kommen die Datensätze
if, titel, staat, stadt
--------------------------------
1 hallo 2 5
2 huhuh 2 4
wenn aber staat=0 ist
sollen eben alle Datensätze kommen
SELECT * FROM table WHERE if('$staat'>0 THEN staat='$staat')
Aber so schauts gut aus geht aber nicht...
Dennis der in einem kleinen Ort wohnt
deshalb die IF abfrage
SELECT * FROM table WHERE staat=2
dann kommen die Datensätze
if, titel, staat, stadt
1 hallo 2 5
2 huhuh 2 4wenn aber staat=0 ist
sollen eben alle Datensätze kommen
Wie im Ansatz schon geschrieben: Prüfe PHP-seitig $staat > 0 und führe den entsprechenden SQL-Befehl aus:
if ($staat > 0) {
machsql("select * from tabelle where staat=" . $staat);
}
else {
machsql("select * from tabelle");
}
Dein Versuch, die Prüfung in die Datenbank auszulagern, läuft im Falle von $staat <= 0 auf den SQL-Befehl "select * from tabelle where true" hinaus. Eine where-Klausel, deren Ergebnis von vornherein feststeht (nämlich "ja"), ist überflüssig. Vermeide sie.
Hello,
Nun möchte ich diese in einer SELECT Abfrage abfragen, wenn Sie Vorhanden, also grösser als 0 ist.
SELECT * FROM table WHERE (IF '$staat'>0 THEN staat='$staat')
doch irgendwas mache ich da falsch?
Das Where-Statement muss auch einen Inhalt haben, wenn es vorhanden ist.
Welchen Inhalt hat es denn bei Dir im Falle <= 0?
http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if
So ginge es, der Datenbank die Last aufzubürden:
SELECT * FROM table WHERE staat = IF($staat > 0, $staat, staat
);
Aber da Du ja augenscheinlich bereits PHP benutzt, kannst Du das Where-Statement doch gleich mit PHP zusammenbauen und nur dann anfügen, wenn mindetens eine Where-Klausel vorhanden ist.
$where = '';
if($staat > 0) { $where .= 'staat
= $staat ';
if(strlen($where) > 0) {$where = 'WHERE '.$where; }
SELECT * FROM table $where;
Steht denn 0 oder NULL in dem Feld?
http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_ifnull
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hello,
Nun möchte ich diese in einer SELECT Abfrage abfragen, wenn Sie Vorhanden, also grösser als 0 ist.
SELECT * FROM table WHERE (IF '$staat'>0 THEN staat='$staat')
doch irgendwas mache ich da falsch?
Das Where-Statement muss auch einen Inhalt haben, wenn es vorhanden ist.
Welchen Inhalt hat es denn bei Dir im Falle <= 0?http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_if
So ginge es, der Datenbank die Last aufzubürden:
SELECT * FROM table WHERE staat = IF($staat > 0, $staat,
staat
);Aber da Du ja augenscheinlich bereits PHP benutzt, kannst Du das Where-Statement doch gleich mit PHP zusammenbauen und nur dann anfügen, wenn mindetens eine Where-Klausel vorhanden ist.
$where = '';
if($staat > 0) { $where .= '
staat
= $staat ';
if(strlen($where) > 0) {$where = 'WHERE '.$where; }SELECT * FROM table $where;
Steht denn 0 oder NULL in dem Feld?
http://dev.mysql.com/doc/refman/5.1/en/control-flow-functions.html#function_ifnull
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Ich denke, das ist die einfachste und sauberste Art,
Danke