Mysql SELECT Befehl mit OR
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
bedingung
code
dank
entwickler
funktionieren
kasse
kleinen projekten
modul
paste
performance
problem
reduzieren
ressource
spalten
status
tauglich entwickler
url
zuweisung
zweck
-
Hi zusammen
Bei meinen kleinen Projekten stosse ich immer wieder auf folgende Situation:
Ich erkläre es am Besten auf Grund eines Beispiels:
Ich habe eine Modul-Tabelle, darin gibt es folgende Spalten:
id modul version online-tauglich entwickler status 1 kasse 1.4 J meron 1
Das J beim Feld Online-tauglich steht für Ja, status 1 = aktiv. So, jetzt möchte ich gerne Datensätze selektieren und zwar eine Liste der Module, die aktiv sind und die von Meron gemacht wurden, oder Modulen die online-tauglich sind.
Der SELECT den ich zu diesem Zwecke zusammenbauen würde, sähe wiefolgt aus:
SELECT * FROM module WHERE status = '1' AND entwickler = 'meron' OR status = '1' AND online-tauglich = 'J';
So, meine Schwierigkeit ist jetzt, dass ich hier zweimal angeben musste " status = '1' ", dass ist einfach eine Doppeldeutigkeit, welche bei späteren Updates nur zu Problemen führen wird (wenn ich dann vergesse, die OR Bedingung auch zu korrigieren ^^) oder wenn ich den zusätzliche Bedingungen mit PHP einfüge, muss dann jeweils auch die ganze Schlaufe Copy&paste eingefügt werden ;-( Zudem glaube ich, dass es doch irgendwie möglich sein muss das auf einmal zu reduzieren, beim Handbuch für Mysql fand ich leider keinen konkreten Hinweis (vielleicht war ich aber auch nur auf den Anfängerseiten).
Könnt ihr mir helfen? Ich weiss, die Abfrage oben ist gerade etwas sinnfrei, zeigt aber schön, was ich machen möchte
Danke für eure Hilfe!
Gruss
Meron
Beitrag zuletzt geändert: 2.7.2011 22:32:31 von meron -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Bin mir nicht ganz sicher, aber ich denke das könnte so funktionieren:
SELECT * FROM module WHERE status = '1' AND (entwickler = 'meron' OR online-tauglich = 'J');
Ausprobiert hab ichs allerdings nicht.
LG -
SELECT * FROM module WHERE (entwickler = 'meron' AND status =1) OR online-tauglich=1;
Bei int Werten brauchst du keine einfachen Hochkommata in der Abfrage, richtige Datentyp Zuweisung in der DB wäre auch noch wichtig. Das online tauglich würde ich mit eine true/false Bedingung lösen, sprich Tinyint und dann 1 || 0
Grüße,
Garlian -
markus-niederbrucker schrieb:
Bin mir nicht ganz sicher, aber ich denke das könnte so funktionieren:
SELECT * FROM module WHERE status = '1' AND (entwickler = 'meron' OR online-tauglich = 'J');
Ausprobiert hab ichs allerdings nicht.
LG
Besten Dank, das funktioniert wunderbar! Ich wusste, doch, das es möglich ist, ich war wohl einfach zu blöd
garlian schrieb:
Bei int Werten brauchst du keine einfachen Hochkommata in der Abfrage, richtige Datentyp Zuweisung in der DB wäre auch noch wichtig.
Danke für den Hinweis, bis jetzt ist es einfach INT(1), dann schränke ich das noch ein, damit mir dort kein Skript eine 2 hinein haut (was dann meine Skripts nicht mehr verstehen könnten Ich setzte grundsätzlich alles in Hochkommata bei den Abfragen (oder auch bei Update, egal welcher Datentyp die Spalte schliesslich hatte), sollte ich dies besser unterlassen, kann das zu Problemen führen bei späteren Updates?
Danke an euch beide und Gruss -
Probleme wird das wohl nicht machen, kann höchstens ineffizient sein(keine Garantie xD).
Allgemein schont es aber die Ressourcen, steigert es die Performance, wenn man auf korrekte Datentypen, Größen und der auszuwählenden Spalten achtet und Redundanzen vermeidet.
Auch sollte man darauf achten,
das Integer Werte nicht falsch gespeichert werden,
wie z.B. ein -1 Wert, der bei IDs nicht vorkommen soll. (Stichwort: unsigned)
Und natürlich deine Skripte,
die gute Werte liefern und böses außen vor lassen ;D -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage