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

Модератор: Модераторы

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

Сообщение vitaly_l » 24.06.2017 12:12:36

Всем хорошего настроения!

Код: Выделить всё
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), что и в запросе?

Спасибо.
Последний раз редактировалось vitaly_l 25.06.2017 08:42:08, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение olegy123 » 24.06.2017 22:20:48

Отключить индексы, всякие оптимизации. Потому что, движок обучен брать сперва данные с индекса, а они там идут по порядку.
Тут нужно знать тонкости данного движка.
На сколько я знаю: 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)...
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

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

Сообщение vitaly_l » 24.06.2017 22:33:10

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 запросе?
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение olegy123 » 24.06.2017 22:49:14

Ой,не 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 помогает разделить таблицы на первичные и вторичные. Вторичные - основной роли в выборке данных не играют, а только дополняют информацией вывод.
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

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

Сообщение vitaly_l » 25.06.2017 00:34:34

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:
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

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

Сообщение olegy123 » 25.06.2017 06:14:07

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);
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

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

Сообщение vitaly_l » 25.06.2017 08:40:47

olegy123 писал(а):ORDER BY FIELD

А вот: ORDER BY FIELD - работает как надо (и никаких JOIN-ов). спасибо.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41


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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru