SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.10.2016 11:10:19

ferer
Участник
Зарегистрирован: 12.05.2011
Сообщений: 7

Выбрать по условию несколько элементов и если не хватит дополнить рамдомно

Здравствуйте!

Столкнулся с такой проблемой. есть таблица

id | cat |      title      |      desc      |
1  |  2  | Название 1 | Описание 1 |
2  |  2  | Название 2 | Описание 2 |
3  |  3  | Название 3 | Описание 3 |
4  |  4  | Название 4 | Описание 4 |
5  |  3  | Название 5 | Описание 5 |
6  |  6  | Название 6 | Описание 6 |
7  |  7  | Название 7 | Описание 7 |
8  |  3  | Название 8 | Описание 8 |


Необходимо выбрать 4 записи с условием, что cat=2, если таких записей не набирается 4шт (как в примере), то добрать записи рамдомно.

Сложность вызывает именно добрать записи рамдомно, если их не набралось 4шт.


Спасибо.

Неактивен

 

#2 18.10.2016 11:17:44

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Выбрать по условию несколько элементов и если не хватит дополнить рамдомно

1. выбираете с cat=2
2. считаете сколько нужно добрать
3. FAQ №9

Неактивен

 

#3 18.10.2016 12:22:44

ferer
Участник
Зарегистрирован: 12.05.2011
Сообщений: 7

Re: Выбрать по условию несколько элементов и если не хватит дополнить рамдомно

Спасибо за ответ, но у меня как раз проблема заключается в том, что я не знаю как дополнительно добрать записи в запросе.

Неактивен

 

#4 18.10.2016 12:34:47

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5827

Re: Выбрать по условию несколько элементов и если не хватит дополнить рамдомно

с т.з. производительности эту задачу лучше решать в несколько запросов

но можно и одним:

select id, cat, title, `desc`, 1 as ord from `таблица` where cat=2
union all
(select id, cat, title, `desc`, 2 as ord from `таблица` where cat<>2 order by rand() limit 4)
order by ord limit 4;

Неактивен

 

#5 18.10.2016 14:04:26

ferer
Участник
Зарегистрирован: 12.05.2011
Сообщений: 7

Re: Выбрать по условию несколько элементов и если не хватит дополнить рамдомно

Спасибо огромное за помощь

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson