[英]Getting data from 2 related and 1 unrelated MySQL tables with one query?
[英]Getting data from multiple related tables mysql
我有一些相關表
用戶
+----+--------------------------+------------+
| id | email | first_name |
+----+--------------------------+------------+
| 2 | Kovacek.Elisha@gmail.com | Loren |
| 3 | Cale.Beatty@gmail.com | Fernando |
| 4 | dKoss@Brown.com | Evelyn |
+----+--------------------------+------------+
活動
+----+------------+
| id | name |
+----+------------+
| 1 | Dolores ve |
| 2 | Harum erro |
| 3 | Ratione qu |
+----+------------+
EVENT_USER(加入)
+---------+----------+
| user_id | event_id |
+---------+----------+
| 1 | 3 |
| 1 | 13 |
| 1 | 48 |
+---------+----------+
以及與用戶相關的其他表(消息,連接)等
我想為特定事件的用戶獲取消息,連接和其他相關數據的計數
我試過的SQL:
SELECT u.`id`, u.`first_name`, u.`last_name`,
COUNT(m.`id`) as message_count,
COUNT(a.`id`) as article_count
FROM `users` u
LEFT JOIN `event_user` eu ON u.`id` = eu.`user_id`
LEFT JOIN `messages` m ON u.`id` = m.`from`
LEFT JOIN `articles` a ON u.`id` = a.`user_id`
WHERE
eu.`event_id` = 3
GROUP BY u.`id`
但是這兩列的計數結果是相同的。
即message_count和article_count對於所有用戶都是相同的。
解決此問題的最簡單方法是使用count(distinct)
:
SELECT u.`id`, u.`first_name`, u.`last_name`,
COUNT(DISTINCT m.`id`) as message_count,
COUNT(DISTINCT a.`id`) as article_count
如果值很大,那么您可能需要在執行聯接之前重寫查詢以進行匯總。
之所以獲得相同的值,是因為count(<column>)
只是計算非空值的數量。 因此,您的查詢是說所有用戶都擁有消息和文章(如果缺少一個或另一個,則left join
將產生NULL
值)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.