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

Php 将MySQL数据显示到HTML表中(解释清楚),php,data-structures,mysql,Php,Data Structures,Mysql,好的,我有一个应用程序,如本文所述: 我已经准备了一个场景来尽可能清楚地回答我的问题: Users table: +----------+-----------------+ | user_id | email | +----------+-----------------+ | user_1 | user1@email.com | | user_2 | user2@email.com | | user_3 | u

好的,我有一个应用程序,如本文所述:

我已经准备了一个场景来尽可能清楚地回答我的问题:

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 |
    +----------+-----------------+
*请注意,用户_3和用户_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             |
        +-------------------+-----------------------+

此查询将为您提供结果。从中显示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_ID,然后选择这些user_ID的所有用户。在此之后,您可以通过用户的电子邮件对结果进行分组,并连接用户正在使用的所有域名。

此查询将为您提供结果。从中显示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_ID,然后选择这些user_ID的所有用户。之后,您将根据用户的电子邮件对结果进行分组,并连接用户正在使用的所有域名。

Lukas,我尝试了,但出现了一个错误。。。1064-您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第6行“ANS d.owner\u id=ud.owner\u id LEFT JOIN users u on ud.user\u id=u.user\u id WHERE”附近要使用的正确语法。它似乎返回任何域用户,当然每个所有者也是用户,如user\u domain表所示。我测试了新查询,现在得到了不寻常的结果。它仍然返回所有者,但这一次,所有者的电子邮件为空,如果其他用户正在使用域,则不会列出所有者的电子邮件。我不知道这是否有意义,但基本上这个结果更糟。我可以过滤掉电子邮件为空的行,但我也不认为这是您所期望的。只需将LEFT JOIN更改为JOIN。我最初误解了这个查询,我认为你想要一个域列表,一个所有用户的域列表,而你想要一个用户列表和所有用户的域列表。卢卡斯,我试过了,我得到了一个错误。。。1064-您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第6行“ANS d.owner\u id=ud.owner\u id LEFT JOIN users u on ud.user\u id=u.user\u id WHERE”附近要使用的正确语法。它似乎返回任何域用户,当然每个所有者也是用户,如user\u domain表所示。我测试了新查询,现在得到了不寻常的结果。它仍然返回所有者,但这一次,所有者的电子邮件为空,如果其他用户正在使用域,则不会列出所有者的电子邮件。我不知道这是否有意义,但基本上这个结果更糟。我可以过滤掉电子邮件为空的行,但我也不认为这是您所期望的。只需将LEFT JOIN更改为JOIN。我最初误解了这个查询,我认为您需要一个域列表,一个所有用户的列表,而您需要一个用户及其所有域的列表。