MySQL: Identifizieren, welche WHERE-Klausel zugeschlagen hat Hallo, ich habe eine MySQL-Abfrage, in der drei WHERE-Klauseln eingebaut sind. Ich würde nun gerne als erstes die Ergebnisse ausgeben, die durch die erste WHERE-Klausel erfüllt wurde, dann die zweite und dann die Dritte. Also sprich: SELECT * FROM t1 WHERE ( t1.c2 = 1 ) OR ( t1.c3 = 'test' ) OR ( t1.c2 = 2 ) Und die Ergebnisse sollen dann so ausgegeben werden: 1. c2 = 1 2. c2 = 1 3. c3 = 'test' 4. c3 = 'test' 5. c2 = 2 Irgendwelche Ideen, wie man so etwas umsetzen kann? PS: Achso gibt es ferner eine Möglichkeit, weitere Attribute an das Ergebnis anzuhängen, um diese später nutzen zu können. Ich möchte nachher die Ergebnisse mit "c2 = 1" bei der Ausgabe kennzeichnen. |
AW: MySQL: Identifizieren, welche WHERE-Klausel zugeschlagen hat Gibts dafür nicht den Group-By Clause? GGf mit Subselect im Group-by |
AW: MySQL: Identifizieren, welche WHERE-Klausel zugeschlagen hat Mit GROUP BY könnte ich nur die Ergebnisse nachher zusammen fassen, oder? Ich möchte aber wissen, welche WHERE-Klausel, dazu geführt hat, dass die entsprechende Zeile im Ergebnis auftaucht. PS: Ne ich glaube ich habe da nichts gefunden ... aber vielleicht hast du ja auch noch einen konkreten Tip. |
AW: MySQL: Identifizieren, welche WHERE-Klausel zugeschlagen hat Du könntest ein UNION versuchen: [code] SELECT * FROM t1 WHERE ( t1.c2 = 1 ) union select * from t1 where ( t1.c3 = 'test' ) union select * from t1 where ( t1.c2 = 2 ) [/code] Oder alternativ ein order by: [code] SELECT * FROM t1 WHERE ( t1.c2 = 1 ) OR ( t1.c3 = 'test' ) OR ( t1.c2 = 2 ) order by case when ( t1.c2 = 1 ) then 1 when ( t1.c3 = 'test' ) then 2 when ( t1.c2 = 2 ) then 3 else 4 end [/code] |
AW: MySQL: Identifizieren, welche WHERE-Klausel zugeschlagen hat Vielen vielen Dank! Genau soetwas habe ich gesucht. Welcher der beiden Ansätze wird denn vermutlich schneller sein? |
AW: MySQL: Identifizieren, welche WHERE-Klausel zugeschlagen hat Ich würde vermuten, dass das UNION schneller ist. OR-Verknüpfungen sind meist sowieso schon langsamer und eine Sortierung nach einer berechneten "Spalte" kostet nochmal Zeit.. Wenn es um eine zeitkritische Abfrage geht, würde ich mir die Mühe machen und eine große Testtabelle erzeugen.. Sowas >1Mio Datensätze kann MySQL schon ordentlich zum Schwitzen bringen ;) Manchmal kommen bei "zu wenigen" Datensätzen auch unzuverlässige Ergebnisse, also dann scheint es so, als wäre die eine Abfrage schneller, bei vielen Datensätzen ist diese Abfrage aber dann gähnend langsam. |
AW: MySQL: Identifizieren, welche WHERE-Klausel zugeschlagen hat Hoi ... wie kann ich denn jetzt doppelte Einträge herausfiltern. Benötige ich dafür wirklich ein Subquery, sprich eine verschachtelte Anfrage. Was genau meinst du mit einer Testtabelle. Einfach nur mal ausprobieren, was schneller geht, oder wie? |
AW: MySQL: Identifizieren, welche WHERE-Klausel zugeschlagen hat [quote]Was genau meinst du mit einer Testtabelle. Einfach nur mal ausprobieren, was schneller geht, oder wie?[/quote] Genau.. Einfach mal ausprobieren und deine Tabelle vorher gut mit Datensätzen füllen.. [quote]wie kann ich denn jetzt doppelte Einträge herausfiltern. Benötige ich dafür wirklich ein Subquery, sprich eine verschachtelte Anfrage.[/quote] Also normalerweise sollten keine doppelten Einträge vorkommen. Oder hat deine Tabelle sowieso schon doppelte Einträge? Ein UNION soll laut Manual automatisch ein UNION DISTINCT sein, d.h. Datensätze, auf die zwei Bedingungen zutreffen werden nur einmal angezeigt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr. |
Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.