2017-04-13 1 views
0

Ich brauche eine SQL prefetcher entlang der Linien vonSQL LIMIT Stichwort: Stellen Sie sicher, ein bestimmtes Ergebnis ist im Preis enthalten

SELECT * WHERE id == x OR id >= y LIMIT 100 FROM ... 

zu schreiben, wo ich das Ergebnis id müssen == x aufgenommen werden, während die anderen Ergebnisse sind nur Bonus. Ist das möglich? Wenn nicht, denke ich, wenn die IDs sortiert sind und die zurückgegebenen Ergebnisse in ihrer Reihenfolge sind, kann ich die Abfrage trotzdem so machen, dass sie garantiert ID == x enthält. Aber könnte schwierig sein.

Edit: So ist die Antwort (von RBM) ist dies:

(SELECT * WHERE id == x) 
UNION 
(SELECT * WHERE id > y LIMIT 100) 

Hinweis: Es ist okay, dass ich kann + -1 Anzahl der Ergebnisse

+1

Sie benötigen zwei Auswahl und Union. Ihre 'id == x ODER id> = y 'würde nicht garantieren, dass' id == x 'ausgewählt würde. – rbm

+0

Es ist möglich, aber Sie haben die SQL erstellt alle wonky. Es geht '' 'SELECT * FROM ... WHERE ... LIMIT ...' ''. Kennzeichnen Sie auch Ihre Datenbank bitte. – Anand

+0

@Anand, nein, das wird nicht garantieren, dass 'id == x' enthalten ist. – rbm

Antwort

2

Wenn Sie id = x müssen einbezogen werden , tun sie etwas wie folgt aus:

select case when id = x then 1 else 2 end sortOrder 
etc 
order by sortOrder 
+0

Ich sehe den Punkt über das Limit abschneiden Zeilen, damit Sie dies verwenden können, um sicherzustellen, dass es nicht ist abgeschnitten. – Anand

1

Nachdem es auf SQL-Syntax setzen, würde es wie folgt aussehen:

SELECT * 
FROM ... 
WHERE id = x OR id >= y 
ORDER BY CASE WHEN id = x THEN 0 ELSE 1 END ASC 
LIMIT 100 

EDIT: Erinnerung: Limit wird nach der Bestellung angewendet.

Verwandte Themen