SELECT + приоритет

Vadimka

Новичок
SELECT + приоритет

Как выбрать 4 строки
из которых максимум 1 строка может быть равна условию AND cat='1'
остальные 3 строки любой категории ...?
или проще говоря из 100 строк 25 были определенной категории ?
 

Фанат

oncle terrible
Команда форума
будет проще ответить, если ты объяснишь, зачем это понадобилось
 

Vadimka

Новичок
в информере необходимо вывести 4 новости
из которых максимум 1 может быть для взрослых...
 

Фанат

oncle terrible
Команда форума
батюшки.
два запроса. один с одной новостью, а второй с тремя
 

Vadimka

Новичок
ну это проще пареной репы ))
я хотел одним запросом. и "новость для взрослых" может быть а может и небыть, например нет новостей для взрослых... тогда выводим все 4 новости без условий...
 

Фанат

oncle terrible
Команда форума
вот и не усложняй себе жизнь на пустом месте
 

zerkms

TDD infected
Команда форума
FractalizeR
и "новость для взрослых" может быть а может и небыть, например нет новостей для взрослых... тогда выводим все 4 новости без условий...
как ты это будешь реализовывать в UNION? покажи! ;)
а потом подумай как бы это было организовано в случае с 2мя запросами.....
вот-вот ;)
 

Pigmeich

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

Четыре раза фетчим результат и выводим.
 

FractalizeR

Новичок
zerkms
А в чем вы видите проблему?

SELECT * FROM news WHERE XXXX AND cat=1 UNION SELECT * FROM NEWS WHERE XXX AND cat<>1

Просто в PHP вывести первые четыре записи рекордсета, не выводя пятую, если она есть. Если речь не идет о большом количестве новостей, думаю, вполне приемлемый вариант. Можно, конечно, извратиться и попробовать что-то вроде

SELECT * FROM (SELECT * FROM news WHERE XXXX AND cat=1 UNION SELECT * FROM NEWS WHERE XXX AND cat<>1) LIMIT 4
 
Сверху