Есть ли что-то типа expr IN (value,...), только без сортировки?

dr_z10

Новичок
Есть ли что-то типа expr IN (value,...), только без сортировки?

Здравствуй, смотрящий сюда. Вопрос задан в теме...
 

dr_z10

Новичок
Хорошо, уточню. В MySQL есть функция, работающая аналогично SELECT expr IN (value,...), но без сортировки? Пусть медленно, лишь бы не сортировала.
 

jer

...
как по твоему в select ... может происходить сортировка?

ты что-то путаешь.

давай объясняй еще подробнее ;) а то читать азы отправят.
 

dr_z10

Новичок
Нужно получить результат запроса
SELECT * FROM table WHERE field1 in ({$values_list}); , где $values_list = список интересующих значений через запятую (все целочисленные, const).

Соответственно, в field1 тип данных smallint,
происходит сортировка по возрастанию, будь она не ладна... А она мне не нужна.

"Если все величины - константы, то они оцениваются в соответствии с типом выражения expr и сортируются." (С) Мануал MySQL
 

dr_z10

Новичок
Нужна такая же, как в $values_list. А он от балды, грубо говоря. Какой тут может быть order by?
 

dr_z10

Новичок
Можно встречный вопрос? А начиная с какой версии сортировки нет? У меня, как оказалось, довольно старый мануал - 4.1.1alpha
 

jer

...
ок, есть такое средство...

order by case field_name when a1 then 1 when a2 then 2 ... end

в case значения пречисляешь в порядке что и в in(...) идут.

идея ясна?

ps: не должно быть такой сортировки по определению и не было ее никогда. я сначала не так понял твой вопрос.

-~{}~ 13.12.04 19:39:

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

dr_z10

Новичок
А попроще вариантов нет? Смысл понятен, но легче от этого не стало.

Какой именно сортировки быть не должно и не было?
 

jer

...
А попроще вариантов нет? Смысл понятен, но легче от этого не стало.
вариантов - вроде нет. я не знаю по крайней мере...

легче не стало от того что слишком много значений? заводи поле в таблице тогда.

Какой именно сортировки быть не должно и не было?
да я сначала подумал что у тебя идет сортировка в порядке следования значений что идут в in (...), а потом понял что ее нет и тебе ее как раз и нужно сделать.
 

dr_z10

Новичок
Profic

Каким образом это использовать? Если дописать в select после where, то результат тот же, что и при использовании in.

jer

Список всегда разный.
 

Profic

just Profic (PHP5 BetaTeam)
млять, а подумать?
в order by. и не забыть про твой expr
 

dr_z10

Новичок
icechel

Без мазы, слишком сложно получается :(

Profic

Не даром ты Profic! Спасибо огромное!

Примерно так получилось:

$ids = "<список через запятую>";
$query = "SELECT <fields> FROM <table> WHERE <expr> IN ({$ids}) ORDER BY FIELD(<expr>,{$ids});";
$result = mysql_query($query);
 

icechel

Новичок
Завтра попробую вариант Profic.
Посмотрим на скорострельность. =)

-~{}~ 14.12.04 13:38:

Мда. Скорость выполнения запроса что в первом случае с WHEN что во втором с FIELD одинаковая. 0.0008 сек. Единственное, что с FIELD запрос красивше кажется
 
Сверху