[ЗАКРЫТО] [MySQL] Узнать позицию в списке
^
Ээээх, блин, упорядочивание множеств...
SELECT id, FIND_IN_SET( id, concat_ws( ',', 4, 3 ) )
FROM test
ORDER BY ( id IN ( 4, 3 ) ) DESC,
FIND_IN_SET( id, concat_ws( ',', 4, 3 ) ) ASC,
id ASC;
За использование строковых функций - низачот
SELECT id, FIND_IN_SET( id, concat_ws( ',', 4, 3 ) )
FROM test
ORDER BY ( id IN ( 4, 3 ) ) DESC,
FIND_IN_SET( id, concat_ws( ',', 4, 3 ) ) ASC,
id ASC;
За использование строковых функций - низачот

За функцию FIND_IN_SET - огромное спасибо, у меня работает, а где вообще можно такие функции искать?
Вчера перерыл весь refman mysql - ничего такого не нашёл, и такую функцию он не знает...
Вчера перерыл весь refman mysql - ничего такого не нашёл, и такую функцию он не знает...
Хммм. Ну, я электронным мануалом пользуюсь, .chm.
Взял, кажется, с сайта mysql. Могу кинуть, если надо (3.5М)
Взял, кажется, с сайта mysql. Могу кинуть, если надо (3.5М)
Отсюда?
А к какой версии?
А к какой версии?
1.1. About This Manual
This is the Reference Manual for the MySQL Database System. It documents MySQL up to Version 5.0.4-beta, but is also applicable for older versions of the MySQL software (such as 3.23 or 4.0-production) because functional changes are indicated with reference to a version number.
Because this manual serves as a reference, it does not provide general instruction on SQL or relational database concepts. It also does not teach you how to use your operating system or command-line interpreter.
The MySQL Database Software is under constant development, and the Reference Manual is updated frequently as well. The most recent version of the manual is available online in searchable form at http://dev.mysql.com/doc/. Other formats also are available, including HTML, PDF, and Windows CHM versions.
Это на первой страничке моего файла написано.
This is the Reference Manual for the MySQL Database System. It documents MySQL up to Version 5.0.4-beta, but is also applicable for older versions of the MySQL software (such as 3.23 or 4.0-production) because functional changes are indicated with reference to a version number.
Because this manual serves as a reference, it does not provide general instruction on SQL or relational database concepts. It also does not teach you how to use your operating system or command-line interpreter.
The MySQL Database Software is under constant development, and the Reference Manual is updated frequently as well. The most recent version of the manual is available online in searchable form at http://dev.mysql.com/doc/. Other formats also are available, including HTML, PDF, and Windows CHM versions.
Это на первой страничке моего файла написано.
thx
Кстати,
SELECT `id` FROM `test` ORDER BY FIND_IN_SET(`id`,concat_ws(',',3,4 DESC,`id` ASC
выглядит покрасивее, хоть и изврат получается с переворачиванием множества.
SELECT `id` FROM `test` ORDER BY FIND_IN_SET(`id`,concat_ws(',',3,4 DESC,`id` ASC
выглядит покрасивее, хоть и изврат получается с переворачиванием множества.
Можно же написать UNION и не париться? или это не "одним запросом"?
UNION подойдёт, если в множестве один-два-три элемента, да и то это - изврат.
А если их тысяча?
А если их тысяча?
И в чем изврат?
И чем он так хуже для больших множеств относительно других решений?
И чем он так хуже для больших множеств относительно других решений?
Приведи пример запроса.
Или я чего-то не понимаю, или ты предлагаешь для множества из тысячи элементов делать UNION из тысячи SELECT'ов?
Или я чего-то не понимаю, или ты предлагаешь для множества из тысячи элементов делать UNION из тысячи SELECT'ов?
Нет, я предлагаю сделать UNION запросов, выбирающего строку по списку и выбирающего строку по возрастанию.
запросов, выбирающего строку по спискуЧТобы в этом запросе данные были упорядочены по позиции в списке - всё равно надо испоьльзовать что-то типа FIND_IN_SET (или делать запрос с тысячей UNION'ов).
Оставить комментарий
kruzer25
Хочется выбрать одну строку таблицы. у которой ID из заданного списка, причём имеет наименьшую позицию в списке; иначе - наименьший ID - то есть, например, для списка (3,2) в первую очередь должна подойти строка с ID=3, во вторую - с ID=2, в третью - с ID=1, в четвёртую - с ID=4 ну и дальше - по возрастанию ID...Как это можно сделать одним запросом?