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

(решено)Порядок вывода SQL в соответствии с порядком запроса

СообщениеДобавлено: 24.06.2017 12:12:36
vitaly_l
Всем хорошего настроения!

Код: Выделить всё
SELECT `id` FROM `xxx` WHERE `id` in (1,5,3,2,4)

возвращает ответы в соответствии с порядком id в базе.
Соответственно, порядок (1,5,3,2,4), меняется на 1,2,3,4,5;

Как сделать так чтобы, ответ возвращался с тем же порядком(1,5,3,2,4), что и в запросе?

Спасибо.

Re: Порядок вывода MySQL, в соответствии с порядком запроса

СообщениеДобавлено: 24.06.2017 22:20:48
olegy123
Отключить индексы, всякие оптимизации. Потому что, движок обучен брать сперва данные с индекса, а они там идут по порядку.
Тут нужно знать тонкости данного движка.
На сколько я знаю: InnoDB <> MyISAM - это разные технологии в MySQL.

если не поможет, попробуй сделать template table потом занести (1,5,3,2,4) и SELECT .. FROM [ptemplate table] RIGHT JOIN `xxx`

Добавлено спустя 7 минут 23 секунды:
Посмотри может вообще прокатить
SELECT * FROM (1,5,3,2,4)..
Если парсер поймет чего от него требуют. то можно template table исключить.. изголятся
SELECT `id` FROM `xxx` WHERE `id`
LEFT JOIN (1,5,3,2,4)...

Re: Порядок вывода MySQL, в соответствии с порядком запроса

СообщениеДобавлено: 24.06.2017 22:33:10
vitaly_l
olegy123 писал(а):На сколько я знаю: InnoDB <> MyISAM - это разные технологии в MySQL.

У меня InnoDB, но это явно не про, то, о чём я спрашивал, т.к. и в InnoDB и в MyISAM - такой SQL запрос должен работать одинаково(ИМХО).

olegy123 писал(а):SELECT * FROM (1,5,3,2,4)..
Если парсер поймет чего от него требуют

:arrow: :shock: :evil:

olegy123 писал(а):сделать template table потом занести (1,5,3,2,4) и SELECT .. FROM ptemplate table] RIGHT JOIN `xxx`

Что ещё за template table? Я не понимаю, шаблон запроса к таблице с порядком 1,5,3,2,4 ? И как это делать?
Вижу что вы очень любите JOIN-ы, но хоть убейте - я не понимаю,
что конкретно нужно сделать, чтобы ответ возвращался с тем же порядком ID (1,5,3,2,4), что и в SQL запросе?

Re: Порядок вывода MySQL, в соответствии с порядком запроса

СообщениеДобавлено: 24.06.2017 22:49:14
olegy123
Ой,не template - а temporary: CREATE [TEMPORARY] TABLE [IF NOT EXISTS]
https://dev.mysql.com/doc/refman/5.7/en ... table.html
виртуальная таблица которая может существовать только во время запроса/ сессии или иных вариантов.

Добавлено спустя 3 минуты 33 секунды:
удобно - создать, напихать туда данные и потом использовать, например - права доступа к объектам.

Добавлено спустя 6 минут 6 секунд:
(1,5,3,2,4) - это есть массив данных, некоторые движки могут представить как виртуальная таблица(типа TEMPORARY)
т.е.
SELECT * FROM (1,5,3,2,4) - выдаст таблицу.Время жизни её - только этот запрос.
Я просто не помню MySQL может или нет.. давно с этой БД работал.

Добавлено спустя 8 минут 48 секунд:
vitaly_l писал(а):Вижу что вы очень любите JOIN-ы, но хоть убейте - я не понимаю,

JOIN помогает разделить таблицы на первичные и вторичные. Вторичные - основной роли в выборке данных не играют, а только дополняют информацией вывод.

Re: Порядок вывода MySQL, в соответствии с порядком запроса

СообщениеДобавлено: 25.06.2017 00:34:34
vitaly_l
olegy123 писал(а):Ой,не template - а temporary: CREATE [TEMPORARY] TABLE [IF NOT EXISTS]
https://dev.mysql.com/doc/refman/5.7/en ... table.html
виртуальная таблица которая может существовать только во время запроса/ сессии или иных вариантов.

Добавлено спустя 3 минуты 33 секунды:
удобно - создать, напихать туда данные и потом использовать, например - права доступа к объектам.

Добавлено спустя 6 минут 6 секунд:
(1,5,3,2,4) - это есть массив данных, некоторые движки могут представить как виртуальная таблица(типа TEMPORARY)
т.е.
SELECT * FROM (1,5,3,2,4) - выдаст таблицу.Время жизни её - только этот запрос.
Я просто не помню MySQL может или нет.. давно с этой БД работал.

Добавлено спустя 8 минут 48 секунд:
vitaly_l писал(а):
Вижу что вы очень любите JOIN-ы, но хоть убейте - я не понимаю,

JOIN помогает разделить таблицы на первичные и вторичные. Вторичные - основной роли в выборке данных не играют, а только дополняют информацией вывод.

:shock: SELECT * FROM (1,5,3,2,4) - всегда и во всех БД - выдаст ошибку, т.к. нет названия таблицы и колонки. :cry: :cry: :cry:

Re: Порядок вывода MySQL, в соответствии с порядком запроса

СообщениеДобавлено: 25.06.2017 06:14:07
olegy123
vitaly_l писал(а):всегда и во всех БД - выдаст ошибку, т.к. нет названия таблицы и колонки.

За всех не говори..
SELECT (1,5,3,2,4); - работает во многих движках..
Код: Выделить всё
SELECT `id` FROM `xxx` WHERE `id` in (1,5,3,2,4) ORDER BY FIELD(id, 1,5,3,2,4);

Re: Порядок вывода MySQL, в соответствии с порядком запроса

СообщениеДобавлено: 25.06.2017 08:40:47
vitaly_l
olegy123 писал(а):ORDER BY FIELD

А вот: ORDER BY FIELD - работает как надо (и никаких JOIN-ов). спасибо.