2010-11-20 7 views
2

Lassen Sie sagen, dass ich mit Hunderten von Spielzeug von verschiedenen Farben in der folgenden Tabelle haben ...MySQL Query mit der mehrere GRENZEN

--------------------------- 
    ITEM | COST | COLOR 
--------------------------- 
    1 | 12.00 | BLUE 
    2 | 10.98 | RED 
    3 | 9.34 | BLUE 
    4 | 11.33 | WHITE 
    5 | 8.00 | YELLOW 
    . | . | . 
    . | . | . 
    . | . | . 

Wenn ich die drei niedrigsten Preis blau Spielzeug wählen wollte, könnte ich natürlich schreiben. ..

SELECT * FROM TOYS WHERE Color = 'BLUE' ORDER BY COST LIMIT 3; 

Aber ist es eine Möglichkeit, dass ich die eine eindeutig festgelegte Anzahl von preisgünstigste gelb, weiß und blau Spielzeug wählen kann, als ob ich sagte ...

SELECT * FROM TOYS WHERE COLOR = 'YELLOW' (LIMIT 1) AND COLOR = 'WHITE' (LIMIT 3) AND COLOR = 'BLUE' (LIMIT 2) ORDER BY COST 

Ist es möglich, dies vollständig in MySQL zu tun, ohne das Array in PHP zu durchlaufen?

+0

Ich nehme an, das folgende würde * nicht * funktionieren, weil es Ressourcen zerstückeln würde: Führen Sie die komplexe Abfrage ohne die letzte WHERE-Klausel (zB " FARBE "oben); Speichern Sie die Ergebnisse in einer temporären Tabelle. und dann eine viel einfachere Abfrage für die temporäre Tabelle ausführen? Da die Website möglicherweise Hunderte, sogar Tausende von gleichzeitigen Benutzern haben könnte, besteht die Möglichkeit, dass diese Abfrage hunderte Male pro Sekunde ausgeführt wird. Habe ich recht, wenn ich davon ausgehe, dass beim Erstellen und Löschen von temporären Tabellen viel mehr Aufwand entsteht als bei mehreren komplexen Abfragen? –

Antwort

5

Warum nicht fusionieren?

select * from toys where color = 'Yellow' (LIMIT 1) 
UNION 
select * from toys where color = 'White' (LIMIT 3) 
UNION 
select * from toys where color = 'Blue' (LIMIT 2) 
+0

Ich habe das einfache Spielzeugbeispiel verwendet, um zu veranschaulichen, was ich erreichen möchte. Die reale Abfrage, auf die ich die Technik anwenden muss, hat ein paar verschachtelte Abfragen, Joins usw. Es ist ziemlich komplex. –

+0

Akzeptiert diese Antwort, weil Sparky die Frage beantwortete, die ich ursprünglich gestellt hatte. Ich hatte die Komplexität der Abfrage in meinem ursprünglichen Beispiel nicht bemerkt. –

-1

Für mich ist die Lösung 3 verschiedene Abfragen erstellen und den 3-Arrays in PHP

+2

Das OP fragt: _ "Ist es möglich, dies vollständig in MySQL zu tun, ohne durch das Array in PHP gehen?" _ – jwueller

+1

lesen Sie die Frage klar ..;) – klox

+0

Ich schlug nicht vor, durch zu gehen, schlug ich vor, – riotera

0

Nun, meiner Meinung nach, Sie waren zwei Optionen hier gegeben, aber ich immer noch durch die Zusammenlegung der Arrays gehen werde, da es nicht so viele Zeit/Systemressourcen wie UNION nehmen. (Basierend darauf haben Sie gesagt, die Tabelle hat eine Menge Zeilen)

+0

Meine maximale Zeilenanzahl ist wahrscheinlich 50K. Die Hauptsache, die ich ansprechen möchte, ist, dass die echte Abfrage, im Gegensatz zu meinem Beispiel, sehr komplex ist, also wollte ich einen Weg finden, sie mehrfach zu vermeiden. –