2013-08-12 57 views
0

有如下形式的表中選擇有條件有限的數據: 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 
+2

我的頭很痛試圖理解這個問題。你認爲你可以編輯它,讓你對我這樣的白癡更簡單些嗎? –

+0

你究竟有什麼不明白的地方? – frops

+1

我想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中做到這一點。 –

回答

2

在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)。

Example on SQL Fiddle

0

總代碼:

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,謝謝=)