php - 在单个 mysql 查询中,从一个表中选择多行,每行包含来自链接表的多行

标签 php mysql postgresql

有两个表,它们之间有一个链接表。


USERS
+-------+---------+
| userID| Username|
+-------+---------+
|     1 |  Nate   | 
|     2 |  Nic    | 
|     3 |  John   | 
+-------+---------+

SITES
+--------+---------+
| siteID | Site    |
+--------+---------+
|     1  |  art    | 
|     2  |  com    | 
|     3  |  web    | 
+--------+---------+

USER_SITES
+-------------+---------+---------+
| user_site_id| user_id | site_id |
+-------------+---------+---------+
|     1       |  1      | 1       |
|     2       |  1      | 2       |
|     3       |  1      | 3       |
|     4       |  2      | 2       |
|     5       |  2      | 3       |
+-------------+---------+---------+

我想做一个这样输出的查询


USERS
+---------+----------------+
| username| sites          |
+---------+----------------+
|  Nate   |  art, com, web | 
|  Nic    |  com, web      | 
+---------+----------------+

这可以通过一个查询轻松完成吗? 我希望能够在 MySQL 和 POSTgreSQL 中做到这一点——但我会尽我所能!

最佳答案

这可以在 MySQL 中使用 GROUP_CONCAT 完成:

SELECT
    username,
    GROUP_CONCAT(Site ORDER BY Site SEPARATOR ', ') AS sites
FROM USER_SITES
JOIN USERS ON USER_SITES.user_id = USERS.userID
JOIN SITES ON USER_SITES.site_id = SITES.siteID
GROUP BY username

结果:

+---------------------------+
| username  | sites         |
+---------------------------+
| Nate      | art, com, web |
| Nic       | com, web      |
+---------------------------+

要了解如何在 PostgreSQL 中模拟 GROUP_CONCAT,请参阅以下问题:

关于php - 在单个 mysql 查询中,从一个表中选择多行,每行包含来自链接表的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3687809/

相关文章:

php,mysql - 将结果组合成多维关联数组

mysql - JPA Eclipselink错误: "Field ' Target_id' doesn't have a default value"

sql - 确定postgres中一系列日期的连续长度

php - MYSQL不会对BYDER变量进行排序

php - 间歇性出现 "Maximum execution time"错误

java - 从 Java (Scala) 调用 PHP 代码并获取结果

python - 从 adbapi 获取结果而不成为 Deferred

php - 如何从表格中计算高度分数

python - 在 QuerySet 中合并结果

python - PostgreSQL 中的子查询返回多行