Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите как упростить запрос / 9 сообщений из 9, страница 1 из 1
30.05.2016, 09:05
    #39245873
McLotos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как упростить запрос
В наследство достался вот такой запрос
Код: plsql
1.
(SELECT * FROM request WHERE status<2 AND date_change < NOW() - INTERVAL 30 MINUTE OR status=2 ORDER by id ASC) UNION (SELECT * FROM request WHERE status<2 AND date_change > NOW() - INTERVAL 30 MINUTE ORDER by id ASC)LIMIT $from, $count


В общем этот запрос построен так чтобы выводить все заявки в порядке поступления и при этом убирать заявку в конец списка в момент когда ее откроют, а через 30 минут вернуть ее в обычную сортировку.
Меня если честно немного напрягает наличие второго запроса, который практически такой же как и первый.
Как можно по-другому построить такой запрос?
...
Рейтинг: 0 / 0
30.05.2016, 09:32
    #39245903
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как упростить запрос
McLotosКак можно по-другому построить такой запрос?
Зачем?
Что не устраивает в нём, кроме ТЕКСТА запроса?
...
Рейтинг: 0 / 0
30.05.2016, 09:46
    #39245931
McLotos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как упростить запрос
Akina,

Напрягает что объединяются 2 пости полностью одинаковых запроса
...
Рейтинг: 0 / 0
30.05.2016, 09:50
    #39245937
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как упростить запрос
То есть всё остальное устраивает. Значит, просто не трогай.
...
Рейтинг: 0 / 0
30.05.2016, 09:57
    #39245950
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как упростить запрос
McLotos,

Неужели UNION сохраняет сортировку?
Выглядит как везение.
...
Рейтинг: 0 / 0
30.05.2016, 10:21
    #39245974
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как упростить запрос
miksoftНеужели UNION сохраняет сортировку?
UNION, как ни странно, сохраняет - по факту, а не потому, что обязан, это в документации не описано, и при кэшируемых результатах подзапросов действительно может помереть... а вот LIMIT эту сохранённую сортировку убьёт гарантированно.
...
Рейтинг: 0 / 0
30.05.2016, 10:25
    #39245980
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как упростить запрос
Правильный запрос мог бы выглядеть так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
(  SELECT 1 as part, * 
   FROM request 
   WHERE status<2 AND date_change < NOW() - INTERVAL 30 MINUTE OR status=2 
-- ORDER by id ASC LIMIT $count
) 
UNION ALL
(  SELECT 2, * 
   FROM request 
   WHERE status<2 AND date_change > NOW() - INTERVAL 30 MINUTE 
-- ORDER by id ASC LIMIT $count
)
ORDER BY part, id
LIMIT $from, $count
...
Рейтинг: 0 / 0
30.05.2016, 12:38
    #39246120
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как упростить запрос
AkinaUNION, как ни странно, сохраняетИменно UNION, без ALL ?
Странно как-то... По крайней мере, я бы на это полагаться бы не стал, даже если по факту работает.
...
Рейтинг: 0 / 0
30.05.2016, 13:08
    #39246144
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите как упростить запрос
miksoftИменно UNION, без ALL ?
Странно как-то...
Условия гарантируют отсутствие дубликатов. А сами данные при сортировке, которую выполняет UNION, в памяти не перемещаются. Так что в данном случае выдача записей "в порядке поступления", если они все помещаются в память, не такая уж и невозможная штука.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подскажите как упростить запрос / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]