【发布时间】:2016-12-21 07:28:43
【问题描述】:
假设我有这个架构:
_________ _________
| Table 1 | | Table 2 |
|---------| _______ ________|---------|
| id_a |___ | link1 | | | id_b |
| name | | |-------| | | info |
|_________| |_____| id_a |___| | data |
| | id_b | |_________|
| |_______|
|
| _______
|______________| link2 |_______
|-------| |
| id_a | | _________
| id_c | |__| Table 3 |
|_______| |---------|
| id_c |
| email |
|_________|
在数据库中有这些信息:
表 1
_____________
| id_a | name |
|------|------|
| 1 | foo |
|______|______|
表 2
_____________________
| id_b | info | data |
|------|------|-------|
| 1 | bar | corge |
| 2 | kux | corge |
| 3 | fred | quux |
|______|______|_______|
表 3
_________________
| id_c | email |
|------|----------|
| 1 | a@o.com |
| 2 | b@o.com |
| 3 | c@o.com |
| 4 | d@o.com |
| 5 | e@o.com |
|______|__________|
链接1
_____________
| id_a | id_b |
|------|------|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
|______|______|
链接2
_____________
| id_a | id_c |
|------|------|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
| 1 | 5 |
|______|______|
当我尝试检索我想要的数据时,我使用以下语法:
SELECT t1.*,
GROUP_CONCAT(DISTINCT t2.info SEPARATOR '|') AS info,
GROUP_CONCAT(DISTINCT t2.data SEPARATOR '|') AS data,
GROUP_CONCAT(DISTINCT t3.email SEPARATOR '|') AS email
FROM table1 AS t1
LEFT JOIN link1 AS l1
ON l1.id_a = t1.id_a
LEFT JOIN table2 AS t2
ON t2.id_b = l1.id_b
LEFT JOIN link2 AS l2
ON l2.id_a = t1.id_a
LEFT JOIN table3 AS t3
ON t3.id_c = l2.id_c
WHERE t1.id_a = ?
GROUP BY t1.id_a
问题是,当我在一列中有两个或多个相同的值时 (例如“表 2”/“数据”),结果不会给出相同数量的连接值:
array(
'id_a' => '1',
'info' => 'bar|kux|fred',
'data' => 'corge|quux',
'email' => 'a@o.com|b@o.com|c@o.com|d@o.com|e@o.com'
)
由于我需要连接的值是完全相同的数字,以便稍后在我的代码中将它们用作单个输出(例如 Bar Corge、Kux Corge、Fred Quux),我想知道是否有可能按照我在请求中的预期直接获得它们?
【问题讨论】:
标签: mysql join group-concat