[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как лучше сделать запрос?
GET
Привет есть таблица...в упрощенном виде:

id/num1/num2/num3/name

есть index: num2 (int)


Нужно получить сначала строки с num2=5, а затем все остальные с лимитом 50

Самый простой (но какой-то колхозный) вижу через вариант через UNION ALL

SELECT `name` FROM `tab` WHERE num2=5
UNION ALL
SELECT
`name` FROM `tab` WHERE num2!=5
LIMIT 50


Можно просто:
SELECT `name` FROM `tab` WHERE num2=5
UNION
SELECT
`name` FROM `tab`
LIMIT 50


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

Можно еще сделать сложный вложенный запрос через что то типа такого
...IF num2=5 tt=1 else tt=0 ... ORDER BY `tt` DESC...


но мне кажется слишком это учитывая, что запрос
SELECT `name` FROM `tab` WHERE num2=5 LIMIT 50
может сразу дать всю необходимую выборку.

Можете что-то посоветовать?

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
T1grOK
SELECT `name` FROM `tab` ORDER BY FIELD(num2, 5) DESC LIMIT 50


_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
sergeiss
Цитата (GET @ 25.12.2015 - 10:29)
Нужно получить сначала строки с num2=5, а затем все остальные с лимитом 50

Самый простой (но какой-то колхозный) вижу через вариант через UNION ALL

Лимит 50 относится ко всей выборке или только "остальных" должно быть не больше 50?

Скорее всего, ты имел ввиду, что всего должно быть не более 50 записей. Поэтому твой первый запрос должен нормально отработать. И в данном случае можно написать просто UNION, а не UNION ALL.

T1grOK, "твой" запрос что сделает с теми полями, которые не равны 5? Насколько я понимаю, он их просто выкинет из выборки.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
T1grOK
sergeiss
Нет. Это обычный запрос, просто с приоритетом значений в FIELD при сортировке.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
GET
Цитата
Лимит 50 относится ко всей выборке или только "остальных" должно быть не больше 50?


Да именно так.

Цитата
И в данном случае можно написать просто UNION, а не UNION ALL.

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

Цитата
SELECT `name` FROM `tab` ORDER BY FIELD(num2, 5) DESC LIMIT 50

Ну да, способ, но наверное откажусь от лишней сортировки.

sergeiss
T1grOK

Спасибо. Решил оставить самый простой - 1 вариант.

_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.