好的,我有一个应用程序,如本文所述:https://stackoverflow.com/questions/1623105/good-database-structure-for-a-new-web-app
我准备了一个方案,让我的问题尽可能清楚:
Users table:
+----------+-----------------+
| user_id | email |
+----------+-----------------+
| user_1 | user1@email.com |
| user_2 | user2@email.com |
| user_3 | user3@email.com |
| user_4 | user4@email.com |
+----------+-----------------+
*注意user_3和user_4没有自己的域
Domains table:
+-----------+------------+
| owner_id | domain |
+-----------+------------+
| user_1 | dom-1.com |
| user_1 | dom-2.com |
| user_2 | dom-3.com |
+------------------------+
下表显示了谁是域的用户以及所有者是谁:
User-Domain table:
+----------+-------------+-----------+
| user_id | domain | owner_id |
+------------------------+-----------+
| user_1 | dom-1.com | user_1 |
| user_1 | dom-2.com | user_1 |
| user_2 | dom-3.com | user_2 |
| user_3 | dom-1.com | user_1 |
| user_3 | dom-2.com | user_1 |
| user_4 | dom-1.com | user_1 |
+------------------------+-----------+
我的问题是,如何以下列格式输出使用给定用户域名的每个用户的列表?
例如(以下是HTML表格):
List of users who are using User_1's domains (HTML TABLE):
+-------------------+-----------------------+
| Email | domains |
+-------------------+-----------------------+
| user3@email.com | dom-1.com, dom-2.com |
| user4@email.com | dom-1.com |
+-------------------+-----------------------+
答案 0 :(得分:3)
此查询应该为您提供结果。从中显示HTML表应该很容易。
SELECT
u.email,
group_concat(d.domain SEPARATOR ', ')
FROM
domains d
JOIN user_domain ud ON d.domain=ud.domain AND d.owner_id=ud.owner_id AND d.owner_id!=ud.user_id
JOIN users u on ud.user_id=u.user_id
WHERE d.owner_id='user_1'
GROUP BY u.email
您基本上选择'user_1'拥有的所有域,然后选择这些域的所有user_ids,然后选择这些user_ids的所有用户。之后,您可以通过用户的电子邮件对结果进行分组,并连接用户正在使用的所有域名。