2012-03-09 155 views
-2

林想知道是否有人可以幫助我。MySQL查詢 - 選擇不同的顯示錯誤的結果

我有數百人上傳圖片到我的網站,基本上每一個上傳有其自己的行與創建的數據,用戶ID數據庫,圖片名稱等,等等等等

我想要做的是顯示最後3個用戶上傳圖像的問題是,如果用戶上傳更多圖片,另一行將添加到該數據庫與該用戶ID,所以我可以只顯示最後3行。

我有以下的說法,但它似乎沒有正常工作

SELECT DISTINCT * FROM kicks GROUP BY uid ORDER BY created DESC LIMIT 3 

我在想,如果有人能指出我在哪裏我去錯了。

乾杯

對不起,我應該補充樣本數據,確定

ID | uid |創建|

195 | 33 | 2012-03-06 12:32:54
196 | 33 | 2012-03-06 12:35:23
197 | 34 | 2012-03-06 13:09:31
198 | 19 | 2012-03-08 10:37:21
199 | 33 | 2012-03-09 21:04:04

+0

DISTINCT按預期適用於整行。你能更清楚地解釋應該如何應用最後3個:SQL是微不足道的,但它取決於你的真正含義... – gbn 2012-03-09 10:26:33

+0

是用戶ID還是用於踢的唯一鍵?你想要返回哪些數據? – kaj 2012-03-09 10:35:24

回答

4

SELECT DISTINCT uid FROM kicks ORDER BY created DESC LIMIT 3是你想要的。

+0

這不工作 – BigJobbies 2012-03-09 10:29:16

+1

你試過嗎?這是非常直接的,我99%肯定它的工作原理。爲我們提供示例數據。 – slash197 2012-03-09 10:31:17

+0

這確實顯示*「最後3個用戶上傳圖像」*。 – 2012-03-09 10:31:57

0

試試這個:

SELECT * FROM kicks WHERE uid IN (
    SELECT DISTINCT uid FROM kicks ORDER BY created DESC 
) LIMIT 3 

,或者如果您ID列auto_incremented,試圖通過它來訂購:

SELECT * FROM kicks WHERE uid IN (
    SELECT DISTINCT uid FROM kicks ORDER BY id DESC 
) LIMIT 3 
+0

這不工作......是否有關「創建」字段是日期時間? – BigJobbies 2012-03-09 10:29:53

+0

不,不應該出現問題。請您發佈SHOW CREATE TABLE踢球嗎? – rkosegi 2012-03-09 10:32:00

+0

我已經用示例數據更新了我的問題 – BigJobbies 2012-03-09 10:36:57

0

數據庫有一個唯一的ID字段,這樣一個新的行會一個新的唯一ID,意思是DISTINCT是多餘的,因爲如果你使用SELECT *,每個字段都是不同的。

爲什麼不嘗試像

SELECT DISTINCT uid FROM kicks 
ORDER BY created 
DESC LIMIT 3 

就像我說的,用*表示每場顯着。 e:您可能需要提供有關數據庫結構的更多信息,這有助於瞭解如何選擇字段。

0

您的查詢確實沒有問題。唯一的問題是,當你按用戶分組時,你需要用MAX()這樣的函數輸出用戶個人最大的上傳時間。我用它來處理類似的數據。

嘗試類似的線路:

SELECT uid, MAX(created) as latest FROM kicks GROUP BY uid ORDER BY created DESC LIMIT 3 

這列「最新」添加到您的查詢結果:)

我的版本將允許你顯示的行唯一的ID,如果你需要出於某種原因,但我認爲如果不需要,接受的DISTINCT版本更清潔。