2011-10-28 29 views
2

好吧,我有兩個表,一個類別表和一個文章表。PHP/MYSQL:獲取連接表的連接數和行數的最後一條記錄

我希望能夠構造一個查詢,它將返回每個類別,該類別的發佈表中的最後一條記錄(category.id = post.category_id),以及所有具有post.category_id = category.id的帖子的rowcount )

類別的列表,每一個最新的職位類別的記錄,並在該類別的職位數。

我已經嘗試過各種連接和子查詢,並且我設法得到了一個類別列表,他們的帖子數和他們的第一篇文章(我需要最後一篇文章)。

我也設法得到一個類別列表和他們的最後一篇文章,但不是職位數。

任何幫助/方向將不勝感激!

回答

1

試試這個:

SELECT category_id, MAX(post_id) AS post_id, COUNT(*) AS posts 
FROM post 
GROUP BY category_id 

這假定你有一列post_id是嚴格遞增的和獨特的。

如果你沒有這樣的字段,但你有例如post_date這不是唯一的,你可能會在兩個帖子有完全相同的時間戳的罕見情況下得到兩行。

沒有帖子使用LEFT也得到類別JOIN:

SELECT 
    category.id AS category_id, 
    MAX(post.id) AS post_id, 
    COUNT(post.category_id) AS posts 
FROM category 
LEFT JOIN post 
ON category.id = post.category_id 
GROUP BY category.id 

如果你需要從每個表中多個列,您可以加入以上與原表中的結果:

SELECT * 
FROM 
(
    SELECT 
     category.id AS category_id, 
     MAX(post.id) AS post_id, 
     COUNT(post.category_id) AS posts 
    FROM category 
    LEFT JOIN post 
    ON category.id = post.category_id 
    GROUP BY category.id 
) T1 
JOIN category 
ON T1.category_id = category.id 
LEFT JOIN post 
ON T1.post_id = post.id 
+0

感謝您的回答馬克,它工作得很好 - 只是一個小小的抱怨。這隻會返回至少有一個帖子的類別,是否可以修改它以返回沒有帖子的類別? 乾杯! – Sam

+0

太棒了!針對我的需求做出快速調整,並且工作完美 - 非常感謝! – Sam

+0

對於其他感興趣的人 - 我將第5行的'category.id'更改爲'category.id AS category_id',它現在可以正常工作 – Sam

1

你的描述缺乏一些數據(我做了假設),但SQL應該是:

SELECT category_id,max(postdate) last,count(id) postcount 
FROM posts 
GROUP BY category_id 

如果從類別表需要的東西,那麼你只需要加入,在

假設:

  1. 有一個在您的文章的表稱爲postdate列反映生成後的日期(所以最大的一個是最近的)。如果沒有日期,你也可以做max(id) ...雖然只有沒有變化,過去的帖子才能更新,所以它實際上是最近的(例如,上週創建的id = 2,今天更新,昨天創建的id = 3)。
  2. 有一列名爲id - 每個帖子行的唯一ID。

如果您需要上一篇文章的內容,您需要將其加入到帖子表中。

+0

感謝您的回覆Rudu。我希望使用posts表中的id字段來搜索最後一篇文章。 我認爲你發佈的查詢將只返回有帖子的類別(我想返回**所有**類別,不管帖子數量如何) 另外,當我嘗試加入帖子數據並按category_id,** first **帖子記錄被返回,而不是最後一個,我只能通過使用子查詢來獲取最後一個(或者看起來像!) 乾杯 – Sam

相關問題