2013-05-06 33 views
0

你知道Facebook主頁如何列出所有最近的帖子?它顯示發佈的用戶,他們的實際發佈內容以及該帖子附帶的前幾個評論。這就是我想要實現的目標,但是我很難建立一個可以收集所有數據的單個查詢。檢索來自MySQL表格的帖子的前幾個評論

我有3個表:用途,帖子和評論。每個人都有一個唯一的ID,但他們引用了彼此的ID。即,註釋表具有用於發佈的用戶的user_id和其附加的帖子的post_id的列。

當時我查詢SQL來收集所有帖子。我和我的用戶和評論表,瞭解海報的用戶名和一個總的職位有多少評論了,就像這樣:

$query = " 

     SELECT  `posts`.`id`,`posts`.`message`,`posts`.`link`, 
        `posts`.`posted`,`posts`.`category`,`posts`.`user_id`, 
        `users`.`username`, 
        count(`comments`.`id`) 
     FROM  `posts` 
     INNER JOIN `users` 
     ON   `posts`.`user_id`=`users`.`id` 
     JOIN  `comments` 
     ON   `comments`.`post_id`=`posts`.`id` 
     WHERE  `posts`.`group_id` = '$id' 
     AND   `posts`.`category`='$filter' 
     GROUP BY `posts`.`id` 
     ORDER BY `posts`.`posted` 
     DESC 

     "; 

但不是找到多少評論的帖子有,我反而喜歡閱讀前幾個帖子。任何人都可以想出一種方法來實現這一點只有一個查詢?

回答

0

您可以將LIMIT子句用於「第一個」帖子。通過將「第一篇文章」作爲子查詢,然後加入評論,您可以在單個查詢中獲得所有內容。在沒有評論的帖子的情況下,評論應該是加入的。

注:

  • 這個查詢是未經測試,但它應該是接近。

  • 這將得到全部對於前幾個帖子的評論,所以你需要使用前端顯示代碼來限制「每篇帖子最多3條評論」的顯示。

  • 在查詢中使用變量在每個帖子內限制註釋可能是3個,但這不是我知道該怎麼做的。

這裏的查詢:

SELECT 
    FirstPosts.id, 
    FirstPosts.message, 
    FirstPosts.link, 
    FirstPosts.posted, 
    FirstPosts.posts, 
    FirstPosts.user_id, 
    FirstPosts.username, 
    comments.<< your comment column >> 
FROM (
    SELECT  `posts`.`id`,`posts`.`message`,`posts`.`link`, 
       `posts`.`posted`,`posts`.`category`,`posts`.`user_id`, 
       `users`.`username` 
     FROM  `posts` 
     INNER JOIN `users` 
     ON   `posts`.`user_id`=`users`.`id` 
     WHERE  `posts`.`group_id` = '$id' 
     AND   `posts`.`category`='$filter' 
     ORDER BY `posts`.`posted` DESC 
     LIMIT 20) FirstPosts 
    LEFT JOIN comments ON FirstPosts.id = comments.post_id 
ORDER BY FirstPosts.Posted, comments.<< column you use to determing comment order >> 

如果您按日期或序列確定評論順序,你必須ORDER BY FirstPosts.Posted, comments.whatever DESC

希望這會有所幫助!

+0

感謝您的回覆。我實際上使用mysqli。另外,我的問題不是如何限制我的結果,而是如何得到結果。如果在我的頁面上會顯示20個帖子,我不想運行20個查詢來返回評論,我想獲取所有帖子數據和這個查詢中的前3個評論。我想這意味着如果MySQL能夠做到這一點,MySQL會返回一個INSIDE數組。 – user1537360 2013-05-06 15:26:10

+0

對不起,我誤解了這個。我會更新我的答案,但請注意:(a)查詢未經測試;(b)前20條帖子將獲得*全部*評論,因此您必須使用前面 - 結束PHP代碼。 – 2013-05-06 15:34:22

+0

哈哈得承認,這打破了我的頭腦一段時間(我對MySQL很新穎)。想想我的頭腦,但是做了一些調整,並做到了這一點。謝謝! – user1537360 2013-05-06 16:09:10

相關問題