2012-04-20 123 views
3

我知道這個問題已經被問多次(但是,我仍然無法找到一個解決方案):的MySQL/PHP:顯示帖子,併爲每個帖子所有評論

基本問題:有表帖子評論用戶 ...你可以用一個單一的選擇語句選擇並顯示所有帖子和所有評論(與comment.user,comment.text,comment.timestamp)?這樣的選擇語句如何看起來像?如果不是,最簡單的解決方案是什麼?

我也試圖JOINcomments表與posts表並使用GROUP BY,但我得到的每一行或每個評論,但還那些帖子多次在任只有一個評論!?

我試着第一個鏈接(嵌套的mysql_query,然後取)以及第二個鏈接(與數組)的解決方案。然而,第一個造成了一堆的錯誤(該文章中的語法似乎不正確,我無法弄清楚如何解決它),在第二次我遇到了數組問題。

我的查詢看起來像這樣至今:

SELECT p.id, p.title, p.text, u.username, c.country_name, (SELECT SUM(vote_type) FROM votes v WHERE v.post_id = p.id) AS sum_vote_type FROM posts p LEFT JOIN user u ON (p.user_id = u.id) LEFT JOIN countries c ON (c.country_id = u.country_id) ORDER BY $orderby DESC 

我在想,如果這個問題是不是很常見,有文章和評論以示...?

感謝您提前給予的幫助!

+0

嗨,我想知道我怎麼可以更新他們兩個呢? – Sarah 2012-09-21 08:50:41

+0

@Sarah:你是什麼意思?你能提供更多的細節嗎? – Chris 2012-09-21 13:14:21

回答

7

不知道你的數據庫結構,它應該看起來像這樣。請注意,您應該將*字符替換爲您實際需要的更明確的列列表。

SELECT p.*, c.*, u.* FROM posts p 
LEFT JOIN comments c ON c.post_id = p.id 
LEFT JOIN users u ON u.id = p.author_id 

請注意,如果您只是想獲得計數,總和和類似的東西,緩存一些信息是一個好主意。例如,您可能想要在帖子表中緩存評論數量,而不是對每個查詢進行計數。只有在添加/刪除評論時才計算並更新評論計數。

編輯: 意識到你也想附加用戶數據到每個評論。您可以多次加入同一個表格,但會變得很難看。這可能會變成一個非常昂貴的查詢。我還包括一個如何別名列的例子,所以它不那麼容易混淆:

SELECT p.*, c.*, u.name as post_author, u2.name as comment_author FROM posts p 
LEFT JOIN comments c ON c.post_id = p.id 
LEFT JOIN users u ON u.id = p.author_id 
LEFT JOIN users u2 ON u2.id = c.author_id 
+0

謝謝你的回答!我嘗試加入評論表,但是按照我的說法,我要麼多次收到多條評論,要麼每次發表一條評論,但只有一條評論......在您的選擇中:我如何回覆每篇文章的所有內容註釋??多謝! :) – Chris 2012-04-20 22:40:40

+0

自從我寫了原始sql以來已經有一段時間了,但我相信這會爲每條評論返回一行,並且每行都會包含整個發佈數據,併爲每條評論重複一次。老實說,不建議在單個查詢中完成此操作。你有沒有理由一次要一切? – dubj 2012-04-20 22:44:38

+0

thx編輯!沒有...沒有,但我想知道如何在多個查詢中做到這一點?因爲...你如何在PHP中打印這個? '$ sql = mysql_query(SELECT ...)'然後'while while($ row = mysql_fetch_array($ sql)){... //如何在這裏顯示帖子和評論??'我可以顯示帖子,但怎麼做我收到每條帖子的所有評論?? – Chris 2012-04-20 22:46:49

相關問題