将MySQL数据显示到HTML表中(清楚地解释)

时间:2009-10-26 07:03:45

标签: php data-structures mysql

好的,我有一个应用程序,如本文所述: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             |
        +-------------------+-----------------------+

1 个答案:

答案 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的所有用户。之后,您可以通过用户的电子邮件对结果进行分组,并连接用户正在使用的所有域名。