Тъй като 1 < 3 < 77 < 123
, прост ORDER BY id
би било достатъчно.
Ако обаче искате да поръчате по този начин:77, 3, 123, 1
, тогава можете да използвате функция FIELD()
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1)
ORDER BY FIELD(id, 77, 3, 123, 1)
Ако заявката ви съответства на повече редове, отколкото сте посочили в FIELD
FIELD
връща 0
когато ред не съвпада с нито един от идентификаторите, които изброявате, т.е. число, по-малко от числата, върнати за изброените идентификатори. Това означава, че ако вашата заявка съвпада с повече редове от тези, които изброявате, тези редове ще се появят първи. Например:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 77, 3, 123, 1)
В този пример редът с идентификатор 400
ще се появи първи. Ако искате тези редове да се показват последни, просто обърнете списъка с идентификатори и добавете DESC
:
SELECT id, name
FROM mytable
WHERE id IN (77, 3, 123, 1, 400)
ORDER BY FIELD(id, 1, 123, 3, 77) DESC