使用单个查询连接两个表并显示第一个表行的第二个表行数据

时间:2015-12-03 05:27:43

标签: php mysql

我需要在与另一个表连接时从表中输出行数据,并且第二个表中的列数据应该通过单个查询以逗号分隔每个第一个表行。如果第二个表中没有匹配的行,则不应该输出。 以下是表格。

users table
╔══════════╦═════════════════╗
║ user_id  ║    username     ║
╠══════════╬═════════════════╣
║ 1        ║ abc             ║
║ 2        ║ def             ║
║ 3        ║ ghi             ║
║ 4        ║ jkl             ║
╚══════════╩═════════════════╝

users_friends table
╔══════════╦═════════════════╗
║ user_id  ║    friend_id    ║
╠══════════╬═════════════════╣
║ 1        ║ 1               ║
║ 1        ║ 2               ║
║ 1        ║ 3               ║
║ 2        ║ 1               ║
║ 2        ║ 3               ║
║ 3        ║ 4               ║
╚══════════╩═════════════════╝

我希望输出如下。

╔══════════╦═════════════════╗═════════════════╗
║ user_id  ║    user_name    ║       friends   ║
╠══════════╬═════════════════╣═════════════════╣
║ 1        ║ abc             ║  1,2,3          ║
║ 2        ║ def             ║  1,3            ║
║ 3        ║ ghi             ║  4              ║
╚══════════╩═════════════════╝═════════════════╝

我尝试了如下查询。但它重复数据。但它没有用。

$sql= "SELECT user_id, user_name, friend_id FROM users INNER JOIN users_friends ON users.user_id= friends.user_id"

1 个答案:

答案 0 :(得分:1)

使用MySQL GROUP_CONCAT()功能:

SELECT u.user_id, u.user_name, GROUP_CONCAT(uf.friend_id)
FROM users u INNER JOIN users_friends uf ON u.user_id = uf.user_id
GROUP BY user_id, user_name