У меня есть таблица с записями, и она ссорится названная category
. Я вставил слишком много статей, и я хочу выбрать только две статьи из каждой категории.
Я пытался сделать что-то вроде этого:
Я создал представление:
CREATE VIEW limitrows AS
SELECT * FROM tbl_artikujt ORDER BY articleid DESC LIMIT 2
Затем я создал этот запрос:
SELECT *
FROM tbl_artikujt
WHERE
artikullid IN
(
SELECT artikullid
FROM limitrows
ORDER BY category DESC
)
ORDER BY category DESC;
Но это не работает и дает мне только две записи?
LIMIT ограничивает только количество результатов, возвращаемых оператором. То, что вы ищете, обычно называется аналитическими/оконными/ранжирующими функциями - которые MySQL не поддерживает, но которые можно эмулировать с помощью переменных:
SELECT x.*
FROM (SELECT t.*,
CASE
WHEN @category != t.category THEN @rownum := 1
ELSE @rownum := @rownum + 1
END AS rank,
@category := t.category AS var_category
FROM TBL_ARTIKUJT t
JOIN (SELECT @rownum := NULL, @category := '') r
ORDER BY t.category) x
WHERE x.rank <= 3
Если вы не измените SELECT x.*
, набор результатов будет включать значения rank
и var_category
- вам придется указать столбцы, которые вам действительно нужны, если это не так.