[英]Get number of likes, posts and commets of specific Facebook post with one query
[英]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.