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

MySQL, PostgreSQL, InterBaseSQL etc

Модераторы: Art.i, vasya

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

Сообщение Ярослав » Пн сен 12, 2005 3:40 pm

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

Сообщение Reals » Пн сен 12, 2005 5:50 pm

Тоже в одно время мучился с этим вопросом. Решил данный вопрос через временную таблицу.
По памяти постараюсь описать действия (давно это было)...

Создается временная таблица:
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;
С Уважением,
Tolik (Reals).
ICQ: 1866611
Reals
 
Сообщений: 74
Зарегистрирован: Пт янв 21, 2005 2:27 pm

Сообщение Ярослав » Пн сен 12, 2005 8:04 pm

Thank you! надо попробовать! Вроде прикольное решение
Ярослав
 
Сообщений: 12
Зарегистрирован: Вт сен 06, 2005 8:53 am

Сообщение garry » Вт сен 13, 2005 3:07 am

а что order by уже отменили ?
garry
Консультант
 
Сообщений: 2241
Зарегистрирован: Сб дек 07, 2002 3:39 pm
Откуда: FirstVDS

Сообщение Reals » Вт сен 13, 2005 9:30 am

Здесь ORDER BY не подходит, так как он делает сортировку. А здесь необходимо вывести список в том порядке, в котором находятся записи в масиве. А записи в масиве могут быть разными.

P.S. Хотя я тут подумал, что наверное у человека, задавшего этот вопрос, значения в масиве и есть отсортированны. Если так, то тогда ему конечно ORDER BY подойдет.
С Уважением,
Tolik (Reals).
ICQ: 1866611
Reals
 
Сообщений: 74
Зарегистрирован: Пт янв 21, 2005 2:27 pm

Сообщение Ярослав » Вт сен 13, 2005 10:37 am

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

Сообщение Ярослав » Вт сен 13, 2005 10:40 am

Сори за подторяющиеся сообщения, мне просто три раза выдал броузер сообщение, типа интернал сервер ерор, вот я и решил несколько раз обновить окно :D
Ярослав
 
Сообщений: 12
Зарегистрирован: Вт сен 06, 2005 8:53 am

Сообщение Reals » Вт сен 13, 2005 11:32 am

Ну я вот так и подумал в первый раз. Так что в этом случае тебе и поможет данный метод, который я описал во втором посте.

Удачи!
С Уважением,
Tolik (Reals).
ICQ: 1866611
Reals
 
Сообщений: 74
Зарегистрирован: Пт янв 21, 2005 2:27 pm

Сообщение Grey » Пн окт 17, 2005 6:19 pm

У 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";

только не забудьте изначально проверять значения массива на предмет спецсимволов, чтобы не получилось потенциальной дыры в безопасности
Grey
Advanced customer
 
Сообщений: 74
Зарегистрирован: Пн май 16, 2005 12:08 pm


Вернуться в Базы данных

Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 0