有如下形式的表中選擇有條件有限的數據: t_news從單個表
- ID
- 標題
- 貓
類別是不是針對每個一致新聞。也就是說,它可能是第2日消息第一類,然後是第三個,然後是第五等
需要去5日消息每個類別,按日期排序。
什麼是輸出應該類似於下面的(例如,3日消息,第3類)
id title cat
1 News1 1
2 News2 1
3 News3 1
4 News4 2
5 News5 2
6 News6 2
7 News7 3
8 News8 3
9 News9 3
有如下形式的表中選擇有條件有限的數據: t_news從單個表
類別是不是針對每個一致新聞。也就是說,它可能是第2日消息第一類,然後是第三個,然後是第五等
需要去5日消息每個類別,按日期排序。
什麼是輸出應該類似於下面的(例如,3日消息,第3類)
id title cat
1 News1 1
2 News2 1
3 News3 1
4 News4 2
5 News5 2
6 News6 2
7 News7 3
8 News8 3
9 News9 3
在MySQL中,你可以使用變量創建一個行號列:
SELECT id, title, cat
FROM ( SELECT id,
title,
cat,
@r:=IF(@cat = cat, @r+1, 1) AS RowNum ,
@cat:= cat AS Cat2
FROM t_news,
(SELECT @cat:= 0) AS cat,
(SELECT @r:= 0) AS r
ORDER BY cat, id
) t
WHERE RowNum <= 5;
如果cat列與@cat變量(從前一行中設置)相同,則每行都有一個鍵,那麼行號會加1。否則它重置爲0.增量的順序由子查詢中的order by子句設置(由於您發佈的模式不包含日期列,所以我使用了ID)。
總代碼:
SELECT id, title, cat, from_unixtime(date) `date` FROM (
SELECT id, title, cat, `date`
FROM
(
SELECT id, title, cat, `date`, @r:=IF(@cat = cat, @r+1, 1) AS RowNum , @cat:= category AS Cat2
FROM news, (SELECT @cat:= 0) AS cat, (SELECT @r:= 0) AS r
WHERE hide=0
ORDER BY cat, `date` DESC, id
) t
WHERE RowNum <= 4 LIMIT 16
) t2
ORDER BY `date` DESC;
@GarethD,謝謝=)
我的頭很痛試圖理解這個問題。你認爲你可以編輯它,讓你對我這樣的白癡更簡單些嗎? –
你究竟有什麼不明白的地方? – frops
我想OP想要一個查詢,將返回每個類別的N個新聞項目。在SQL Server中,我會像'WITH WITH編號的AS(SELECT ID,新聞,貓,ROW_NUMBER()OVER(PARTITION BY貓ORDER BY日期desc)那樣做rownum)SELECT id,news,cat FROM編號where rownum <@ N'。不知道如何在MySQL中做到這一點。 –