Нужна помощь в упрощении этого SQL-запроса, возможно, к одному SELECT:
(SELECT * FROM 'deals'
WHERE category_id = 1
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM 'deals'
WHERE category_id = 2
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM 'deals'
WHERE category_id = 4
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM 'deals'
WHERE category_id = 5
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM 'deals'
WHERE category_id = 6
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM 'deals'
WHERE category_id = 8
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM 'deals'
WHERE category_id = 9
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM 'deals'
WHERE category_id = 10
ORDER BY id desc
LIMIT 10)
UNION
(SELECT * FROM 'deals'
WHERE category_id = 17
ORDER BY id desc
LIMIT 10)
Мне сказали попробовать использовать GROUP BY и HAVING. Тем не менее, любой запрос, который я пробовал, не работает ни малейшим образом...
Любая помощь будет оценена!
EDIT - извинения, забыл упомянуть механизм базы данных MySQL
Вы можете сконденсировать это с помощью оконной функции, чтобы ограничить каждое ведро группы до 10.
SELECT
*
FROM
(
SELECT
*,
ROW_NUMBER() OVER PARTITION BY(category_id ORDER BY id DESC) AS GroupOrder
FROM 'deals'
WHERE category_id BETWEEN 1 AND 10
)AS X
WHERE
GroupOrder<=10
Для более старых версий MySQL без оконных функций здесь приведен код.
SELECT T1.ID, T1.Category_ID, T1.Name
FROM (
SELECT @row_num := IF(@prev_value=concat_ws('',t.Category_ID),@row_num+1,1) AS RowNumber
,t.*
,@prev_value := concat_ws('',t.Category_ID)
FROM data t,
(SELECT @row_num := 1) x,
(SELECT @prev_value := '') y
ORDER BY t.Category_ID
) T1
WHERE T1.RowNumber < 10
AND T1.Category_ID IN (1,2,3,4,5,6,7,8,9,10)
Вам нужно будет добавить необходимые имена полей для другого выбора.
Это использует описанную здесь методику
Я не уверен, мне нужно знать, нужен ли вам этот лимит в 10 баллов, так ли это, например, 10 лучших из этих вещей?
если нет, то
SELECT * FROM 'deals'
WHERE category_id between 0 and 10 or category_id=17
ORDER BY category_id asc, id desc
deals
ГДЕ id> 11 и (category_id между 0 и 10 или category_id = 17) ORDER BY category_id asc, id desc