mysql union

Ragnarok
На сайте с 25.06.2010
Offline
226
492

не могу сделать запрос..

нужно в 1 запросе из перечисленных извлечь 5 записей, из них взять 1 случайную запись с a>0, 2 случайных с b>0, остальные любые; 5 записей без повторов

делаю


(SELECT * FROM `table`
WHERE id='115' OR id='148' OR id='288' OR id='148' OR id='52' OR id='106' OR id='50' OR id='107' OR id='112' OR id='114' OR id='196' OR id='199'
AND a>0
ORDER BY RAND() LIMIT 1)
UNION (SELECT * FROM `table`
WHERE id='115' OR id='148' OR id='288' OR id='148' OR id='52' OR id='106' OR id='50' OR id='107' OR id='112' OR id='114' OR id='196' OR id='199'
AND `b` > 0
ORDER BY RAND() LIMIT 2)
UNION (SELECT * FROM table
WHERE id='115' OR id='148' OR id='288' OR id='148' OR id='52' OR id='106' OR id='50' OR id='107' OR id='112' OR id='114' OR id='196' OR id='199'
ORDER BY RAND()) LIMIT 5

выводит 5 записей, но a и b всегда одинаковые (хотя нужно случайную)

по одной каждый из 3 запросов работает корректно

//TODO: перестать откладывать на потом
[umka]
На сайте с 25.05.2008
Offline
456
#1

Все условия с OR-ами нужно запихнуть в скобки

[umka] добавил 04.12.2010 в 20:13

А вообще, красивей будет написать: WHERE id IN (115, 148, 288, ......) AND a>0

Лог в помощь!
Ragnarok
На сайте с 25.06.2010
Offline
226
#2
'[umka:
;8118638']Все условия с OR-ами нужно запихнуть в скобки

[umka] добавил 04.12.2010 в 20:13
А вообще, красивей будет написать: WHERE id IN (115, 148, 288, ......) AND a>0

исправил, всё равно выдает одни и те же по условиям a и b (хотя есть другие удовлетворяющие)

на тест убрал b, но a все равно выдает одни и те же


(SELECT * FROM `table`
WHERE (id IN(115,148,288,148,52,106,50,107,112,114,196,199)) AND `a` > 0 ORDER BY RAND() LIMIT 2)
UNION (SELECT * FROM table
WHERE (id IN(115,148,288,148,52,106,50,107,112,114,196,199)) ORDER BY RAND()) LIMIT 5

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий