2010-05-03 45 views
2

我創建查詢以使用SQL DB檢索論壇中的最新帖子。SQL檢索最新記錄,按唯一外鍵分組

我有一張名爲「Post」的表格。每篇文章與「線程」和「用戶」以及創建日期都有外鍵關係。

訣竅是我不想在同一個線程中顯示同一用戶或兩個帖子的兩篇文章。是否有可能創建一個包含所有這些邏輯的查詢?

# Grab the last 10 posts. 
SELECT id, user_id, thread_id 
FROM posts 
ORDER BY created_at DESC 
LIMIT 10; 

# Grab the last 10 posts, max one post per user 
SELECT id, user_id, thread_id 
FROM post 
GROUP BY user_id 
ORDER BY date DESC 
LIMIT 10; 

# Grab the last 10 posts, max one post per user, max one post per thread??? 

回答

0

試試這個,看看是否有幫助:

SELECT DISTINCT 
id, user_id, thread_id 
FROM posts 
ORDER BY created_at DESC LIMIT 10; 

SELECT DISTINCT 
id, user_id, thread_id 
FROM post 
GROUP BY user_id 
ORDER BY date DESC 
LIMIT 10; 

您還可以看到一個tutorial關於這一點,一個discussion這一點。

乾杯! :)

+0

也許我錯過了一些東西,但爲什麼會DISTINCT幫助?不是ID列的PK? – hgulyan 2010-05-03 04:43:13

+0

DISTINCT不會幫助 - 因爲ID始終不同! – jbox 2010-05-03 05:04:32

+0

我知道DISTINCT是解決方案的一部分,但不確定它的確切用途,所以還包括一個教程鏈接。 – DMin 2010-05-03 05:31:41

0

我沒有測試過這一點,但是這給一試:

(
    SELECT p1.id, p1.user_id, p1.thread_id 
    FROM post AS p1 LEFT OUTER JOIN post AS p2 
    ON (p1.user_id = p2.user_id AND p1.date < p2.date) 
    WHERE p2.id IS NULL 
    ORDER BY p1.date DESC 
    LIMIT 10 
) 
UNION DISTINCT 
(
    SELECT p3.id, p3.user_id, p3.thread_id 
    FROM post AS p3 LEFT OUTER JOIN post AS p4 
    ON (p3.thread_id = p4.thread_id AND p3.date < p4.date) 
    WHERE p4.id IS NULL 
    ORDER BY p3.date DESC 
    LIMIT 10 
) 
ORDER BY date DESC 
LIMIT 10; 
0

這個是什麼?每個用戶的第一個查詢,每個用戶和每個線程的第二個查詢。

SELECT id, user_id, thread_id 
FROM post p1 
WHERE id = (SELECT id 
      FROM post 
      WHERE user_id = p1.user_id 
      ORDER BY date DESC 
      LIMIT 1) 
ORDER BY date DESC 
LIMIT 10; 

SELECT id, user_id, thread_id 
FROM post p1 
WHERE id = (SELECT id 
      FROM post 
      WHERE user_id = p1.user_id 
      ORDER BY date DESC 
      LIMIT 1) 
AND id = (SELECT id 
      FROM post 
      WHERE thread_id = p1.thread_id 
      ORDER BY date DESC 
      LIMIT 1) 
ORDER BY date DESC 
LIMIT 10; 
+0

如果您在第一個查詢中只能得到10條記錄,那麼您可能會在第二條右方少於10條記錄? – jbox 2010-05-03 05:48:23

+0

@jbox,是的,當然,有些情況下兩個查詢最終可能會少於10行。 在第一個查詢中,如果沒有10個用戶,可能會發布smth。在第二種情況下,當10個不同的用戶沒有10個線程時。 – hgulyan 2010-05-03 05:54:04

+0

@jbox,查詢只是找到當前用戶和當前線程的最後一篇文章。你試過了嗎? – hgulyan 2010-05-03 05:55:30