Как отсортировать выборку по значениям двух столбцов?
Добрый день, имею таблицу вида:
id
owner_id
etc...
id+owner_id = pk
Есть на входе пары значений id+owner_id по которым надо сделать выборку и сортировку, т.е.
SELECT * FROM my_table WHERE (id = 1 AND owner_id = 3) OR (id = 4 AND owner_id = 2) ORDER BY ?
необходимо сделать ORDER BY таким же порядком как и WHERE, т.е. порядок выборки должен быть такой
|id|owner_id|
|1|3|
|4|2|
Есть ORDER BY FIELD(), но как его применить к паре стобцов?
Спасибо
а) Почему бы не использовать просто ORDER BY id, owner_id ?
б) Если уж пошли таким путем, то, имхо, лучше написать SELECT *, CONCAT_WS('_', id, owner_id) AS t FROM ... WHERE ... ORDER BY t;
Никита Колосов:
a) id и owner_id по отдельности не уникальны, но уникальны в паре
б) суть не меняется
в) подскажите, почему при длином where вида (id = 1 and owner_id = 1) or (id = 2 and owner_id = 2) or ... перестает использоваться primary key как индекс
pantsarny: Как вы представляете себе попарную сортировку? С чем сравнивать пару?
В моем случае действительно отсортирует вначале по id, а потмо результат еще и по owner_id
Но если вам будет легче заюзайте ORDER BY (id + owner_id)
Игорь:
order by id, owner_id абсолютно не подходит
мне надо что-то вроде совмещенного FIELD для пары значений.
Представим на входе массивы вида [id, owner_id]:
[1, 2]
[3, 4]
[5, 6]
я составляю запрос вида WHERE (id = 1 AND owner_id = 2) OR (id = 3 AND owner_id = 4) OR (id = 5 AND owner_id = 6)
с этим все отлично, субд поняла чего я хочу. Но я хочу еще сделать сортировку в таком же порядке как и условия в WHERE, т.е. что-то вида ORDER BY FIELD (id+owner_id, 1+2, 3+4, 5+6)