簡體   English   中英

從多個相關表中獲取數據mysql

[英]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.

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