Страница 1 из 1

Вывод записей из таблицы в определенной последовательности

СообщениеДобавлено: Пн сен 12, 2005 3:40 pm
Ярослав
Может у меня глупый вопрос, но всё же. Как из таблицы вывести записи в определенном порядке? То есть, к примеру у меня есть одномернный массив со значениями a1 a2 a3 a4 a5, а в таблице записи расположены в порядке а3, а4, а2,а5, а1, а7, а9, а6.

СообщениеДобавлено: Пн сен 12, 2005 5:50 pm
Reals
Тоже в одно время мучился с этим вопросом. Решил данный вопрос через временную таблицу.
По памяти постараюсь описать действия (давно это было)...

Создается временная таблица:
create temporary table tmp_table (id int NOT NULL auto_increment, Value int, primary key(id));
В эту таблицу записываешь значения масива. то есть бежишь по циклу масива, и записываешь значение в таблицу в поле Value.

Потом выполняешь такого типа запрос:
SELECT tbl.* FROM tmp_table tmp LEFT JOIN tbl_table1 tbl ON tbl.Value = tmp.Value;

Результат выполнения этого запроса, будут записи в нужном порядке, точнее в таком порядке, в каком находятся записи во временной таблице.

P.S. Незабываем в конце удалить временную таблицу:
DROP TABLE tmp_table;

СообщениеДобавлено: Пн сен 12, 2005 8:04 pm
Ярослав
Thank you! надо попробовать! Вроде прикольное решение

СообщениеДобавлено: Вт сен 13, 2005 3:07 am
garry
а что order by уже отменили ?

СообщениеДобавлено: Вт сен 13, 2005 9:30 am
Reals
Здесь ORDER BY не подходит, так как он делает сортировку. А здесь необходимо вывести список в том порядке, в котором находятся записи в масиве. А записи в масиве могут быть разными.

P.S. Хотя я тут подумал, что наверное у человека, задавшего этот вопрос, значения в масиве и есть отсортированны. Если так, то тогда ему конечно ORDER BY подойдет.

СообщениеДобавлено: Вт сен 13, 2005 10:37 am
Ярослав
Нет, order by мне не подходит, так как данные в массиве распологаются относительно случайным образом, то есть не по возрастанию или убыванию. В этом вся проблема. :D

СообщениеДобавлено: Вт сен 13, 2005 10:40 am
Ярослав
Сори за подторяющиеся сообщения, мне просто три раза выдал броузер сообщение, типа интернал сервер ерор, вот я и решил несколько раз обновить окно :D

СообщениеДобавлено: Вт сен 13, 2005 11:32 am
Reals
Ну я вот так и подумал в первый раз. Так что в этом случае тебе и поможет данный метод, который я описал во втором посте.

Удачи!

СообщениеДобавлено: Пн окт 17, 2005 6:19 pm
Grey
У MySQL есть функция FIELD(str,str1,str2,str3,...)
Насколько я понял, массив создаётся программно и далее передаётся мускулю, посему проще передать один запрос, нежели создавать временную таблицу.
На перле оно будет примерно так:
Код: выделить все
sQL = "SELECT val1, val2, FIELD(val1, '".join( "','", @array )."' ) AS id  FROM tab WHERE val1 IN('".join( "','", @array )."') ORDER BY id";

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