2012-03-12 95 views
-1

我有一個名爲items的表。在這個表中有很多列。其中一列被稱爲「來源」。我想要做的是從表格中選擇記錄。我想選擇最新的5條記錄,條件是'源'列是不同的。mysql選擇問題

我試過如下:

SELECT DISTINCT SOURCE from items order by time DESC LIMIT 5 

,但我需要全程記錄不只是來源,當我嘗試包括多個列這是行不通的。

我嘗試這樣做:

SELECT * FROM items WHERE item_section='sp_500' GROUP BY source ORDER BY time DESC LIMIT 3 

,但它並沒有給我最新的記錄

+0

我被這樣的事實,這是非常困難驚訝,我必須失去 – user557862 2012-03-12 08:17:57

+0

你能張貼您正在使用的表的一個例子的東西嗎? – XepterX 2012-03-12 08:20:51

回答

2

棘手。

試試這個。

SELECT items.* 
    FROM items 
    INNER JOIN 
    (SELECT source, max(time) maxtime 
     FROM bbc 
     GROUP BY source 
     ORDER BY max(time) DESC 
     LIMIT 5 
    ) s 
ON items.source = s.source and items.time = maxtime 
+0

答案就是沿着這些線......爲什麼sql如此強悍?大聲笑 – user557862 2012-03-12 11:12:20

0

只是這樣做:

SELECT * FROM items WHERE source IN (
    SELECT DISTINCT source FROM items ORDER BY time DESC LIMIT 5 
) 
+0

這將返回多個列爲相同的源名稱,所以結果可能> 5 – 2012-03-12 08:21:02

+0

得到其中的一個警告:mysql_fetch_array():提供的參數不是在/ home/market2d/public_html/common/linkwriter_front .php on line 12 雖然你寫的看起來不錯 – user557862 2012-03-12 08:23:00

0

試試這個

SELECT * FROM items as itm,(SELECT pk,DISTINCT source as src FROM items ORDER BY time DESC LIMIT 5) as temp WHERE itm.pk = temp.pk 

哪裏pk是你的主要鍵

0

爲保證選擇最新的五條記錄,我建議您添加一個名爲"created"的新列,並在其中插入創建該記錄的time()

例子:

Insert into items values(ID,SOURCE, CREATED) 

當選擇最新五大唱片,你可以這樣做:

SELECT source, Max(created) FROM items GROUP By created LIMIT 5