簡體   English   中英

獲取帶有喜歡和評論的帖子-一個查詢?

[英]Get Posts with likes and comments - one query?

我將為用戶個人資料開發隔離牆。 它的工作原理基本上與Facebook的評論/贊系統相同。

所以我想做的是獲取與用戶個人資料關聯的所有牆貼(通過當前id變量)以及與此特定帖子關聯的所有評論和喜歡。 我想同時使用評論和喜歡的用戶數據(例如:姓名,user_id,電子郵件等)。

所以問題是:可能嗎?

根據此主題的答案,不是: 獲取所有新聞和所有評論

根據這個線程是: mysql / php:顯示帖子,對於每個帖子,所有注釋

我曾嘗試使用此代碼,但似乎不起作用,因為它只是從數據庫中獲取所有注釋。

SELECT p.*, c.*, l.*, u.name as post_author, u2.name as comment_author, u3.user_id
FROM edu_wall p
LEFT JOIN edu_comments c ON c.comment_entity = p.post_id
LEFT JOIN edu_likes l ON l.like_entity = p.post_id
LEFT JOIN edu_users u ON u.user_id = p.post_author
LEFT JOIN edu_users u2 ON u2.user_id = c.comment_author
LEFT JOIN edu_users u3 ON u3.user_id = l.like_author

那么解決方案是什么? 我應該首先獲取所有牆貼,然后在while()內循環注釋和點贊嗎? 這似乎是一個非常復雜且占用大量資源的解決方案。

提前致謝!

您可以使用工會例如:

SELECT id, p.name, NULL as "type", u1.username 
FROM edu_wall p 
LEFT JOIN users u1 ON u.id = p.user_id
UNION
SELECT id, NULL as 'name', e.type, u2.username 
FROM edu_likes e 
LEFT JOIN users u2 ON u.id = e.user_id

Null是替換表之間的多余列,因此在這里,當type為NULL時,則信息針對edu_wall用戶,並且在注意它們針對edu_likes用戶時。

你應該嘗試看看自己

在單個查詢中肯定可以做到這一點。

在不知道您的表布局以及您想使用哪些字段的情況下,我目前無法提供任何建議的代碼。

然而,問題在於,單個牆貼將有大量評論和喜歡。 您當前的SQL將為注釋的每種組合和每條牆貼一樣返回一行。 因此,如果牆上的帖子有2條評論和2個贊,則將導致4行。

您可以通過兩種方法解決此問題。 確保您在SELECT上有一個order子句,然后在php中手動處理每一行,並確定該牆貼是否有新的評論或類似內容。 如果是這樣,請處理它,如果不忽略它。

或者,您可以使用聚合函數(例如GROUP_CONCAT)將您想要的字段帶回一行。 然后在php中將它們炸開。 SQL像這樣:

SELECT p.*, u.name as post_author, GROUP_CONCAT(u2.name SEPARATOR '#') as comment_authors, GROUP_CONCAT(u3.user_id SEPARATOR '#') as post_likers
FROM edu_wall p
LEFT JOIN edu_comments c ON c.comment_entity = p.post_id
LEFT JOIN edu_likes l ON l.like_entity = p.post_id
LEFT JOIN edu_users u ON u.user_id = p.post_author
LEFT JOIN edu_users u2 ON u2.user_id = c.comment_author
LEFT JOIN edu_users u3 ON u3.user_id = l.like_author
WHERE p.id = $SomeWallId
GROUP BY p.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM