10 messages in com.mysql.lists.mysql-deRe: Query will nicht so wie ich...| From | Sent On | Attachments |
|---|---|---|
| Tim Hildebrandt | 29 May 2006 10:29 | |
| Sebastian Mendel | 30 May 2006 02:08 | |
| Tim Hildebrandt | 30 May 2006 09:40 | |
| Felix Antonius Wilhelm Ostmann | 30 May 2006 23:33 | |
| Sebastian Mendel | 30 May 2006 23:38 | |
| Sebastian Mendel | 30 May 2006 23:43 | |
| Felix Antonius Wilhelm Ostmann | 30 May 2006 23:45 | |
| Felix Antonius Wilhelm Ostmann | 30 May 2006 23:47 | |
| Sebastian Mendel | 31 May 2006 00:33 | |
| Sebastian Mendel | 31 May 2006 00:44 |
| Subject: | Re: Query will nicht so wie ich...![]() |
|---|---|
| From: | Sebastian Mendel (lis...@sebastianmendel.de) |
| Date: | 05/30/2006 11:38:37 PM |
| List: | com.mysql.lists.mysql-de |
Felix Antonius Wilhelm Ostmann schrieb:
Tim Hildebrandt schrieb:
Hallo Sebastian, hallo Liste
Danke für Deine Query. Ich wußte gar nicht, dass man innerhalb des LEFT JOIN nach der Verknüpfung der beiden Schlüssel auch noch AND-Bedingungen angeben kann. Da ich die Bedingung immer nach der WHERE Klausel angegeben habe, hat natürlcih zuerst das JOIN durchgeführt und dann die Bedingungen überprüft... Wodurch dann natürlich die Datensätze mit disabled = 0 flitzen gegangen sind.
Danke, wieder eine Erkenntnis mehr... ;-)
und was macht eigentlich das "WHERE `A`.`id` > 0"? ist das nicht überflüssig? ich nehme doch mal an das A.id eh ein PK ist, oder? da gibt es doch eh kein 0 drinne ...
Auf die Frage habe ich gewartet :-) Ich habe mir angewöhnt, bei nicht allzu performancelastigen Abfragen gleich nach dem WHERE die ID-Spalte aus der Haupttabelle zu tippen, da ich meine Queries im PHP-Quelltext erstelle und zwischendurch mal folgendes auftauchte:
$query = "SELECT * FROM tabelle"; if($var == 1) { $query .= " WHERE a = b"; } $query .= " AND x = y";
Das Problem war nunmehr die Bedingung $var == 1. Ist diese nicht eingetroffen, hatte ich einen SQL-Syntaxerror und jede Menge Grübelei. Wenn ich aber schreibe:
$query = "SELECT * FROM tabelle"; $query .= " WHERE id > 0"; if($var == 1) { $query .= " AND a = b"; } $query .= " AND x = y";
kann kommen, was will, is alles wurscht.
Das Problem ist alt bekannt und es gibt eine viel schönere Lösung ;)
$query = "SELECT * FROM tabelle"; $query .= " WHERE 1"; if($var == 1) { $query .= " AND a = b"; } $query .= " AND x = y";
Ich hab das WHERE 1 eigentlich auch in fast jeder Anfrage drin, macht auch nicht wirklich Perfomancetechnisch dann noch irgendwas aus :) Und es ist überall gleich :)
Doch, zumindest gab es mal einen (Perfomance?)-Bug mit 'WHERE 1'
-- Sebastian




