Forum Webscript.Ru

Общие => Базы данных => Тема начата: kiruxa от 18 Марта 2008, 12:18:36

Название: Простой SELECT по порядку
Отправлено: kiruxa от 18 Марта 2008, 12:18:36
Добрый день

возникла такая проблемка

есть группа ID по которым надо сделать выборку

например - 11, 33, 22, 55, 44


Я делаю запрос

SELECT * FROM tbl WHERE id in (11, 33, 22, 55, 44)

Все правильно выбираеться только порядок не соблюден в fetch_array - выдаеться как находит по таблице 11,22,33,44,55 .... мне надо чтобы выбралось именно как я хотел ... 11, 33, 22, 55, 44 ... подскажите как прописать в ORDERe чтобы выбралося именно как надо

спасибо
Название: Простой SELECT по порядку
Отправлено: ravshaniy от 19 Марта 2008, 13:15:54
Мне кажется правильнее добавить в таблицу поле по которому делать Order By. и для изменения порядка вам нужно будет всего лишь сделать UPDATE для этого поля. Это не накладное решение.

есть также вариант с использованием UNION
(SELECT * FROM tbl WHERE id = 11) UNOIN(SELECT * FROM tbl WHERE id = 22)UNOIN(...)

есть вариант с созданием временной таблицы, для мускула это выглядело бы так:

CREATE TEMPORARY TABLE tmpTable(
  tmp_id INT(11) NOT NULL AUTO_INCREMENT,
  id /*здесь определение вашего ида*/
);
INSERT tmpTable (id) VALUES (11,22...44);
SELECT t.*
FROM tbl t
  INNER[FULL] JOIN tmpTable tt USING(id)
ORDER BY tt.tmp_id


но как я думаю это извраты. вместо простого селекта использование таких извратов скорее всего клиника
Название: Простой SELECT по порядку
Отправлено: kiruxa от 19 Марта 2008, 13:38:35
Решил одним запросом

заработало и нфмного проще
мож кому пригодиться

SELECT *
FROM lu_country
WHERE id
IN ( 11, 33, 22, 55, 44 )
ORDER BY FIND_IN_SET( id, \'11, 33, 22, 55, 44\' )