Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Как лучше сделать запрос?
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев, 2 дня
Карма: 87




Привет есть таблица...в упрощенном виде:

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
может сразу дать всю необходимую выборку.

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


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 19 дней
Карма: 170




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
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14969
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 28 дней
Карма: 443




Цитата (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
PMICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
T1grOK  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2703
Пользователь №: 24406
На форуме: 6 лет, 1 месяц, 19 дней
Карма: 170




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


--------------------
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
PMПисьмо на e-mail пользователюСайт пользователя
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
GET  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



TERRAFORMING ENGINEER
******

Профиль
Журнал
Группа: ★ЛжеЭксперт★
Завсегдатай форума
Сообщений: 3846
Пользователь №: 21196
На форуме: 6 лет, 9 месяцев, 2 дня
Карма: 87




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


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

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

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

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

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

sergeiss
T1grOK

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


--------------------
Не тот велик, кто не падал, а тот кто падал и поднимался.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса