我为客户设置了一个小目录网站。
对于这个问题,我们至少需要知道这两个问题:
TABLE: places TABLE: tags
| pid | name | lat | lng | | tid | pid | value |
------------------------------- ---------------------
| 1 | Place 1 | x.xx | x.xx | | 0 | 2 | tag1
| 2 | Place 2 | x.xx | x.xx | + | 1 | 2 | tag2
| 3 | Place 3 | x.xx | x.xx | | 2 | 1 | tag1
......我希望得到更像这样的东西
| pid | name | lat | lng | value |
--------------------------------------------
| 2 | Place 2 | x.xx | x.xx | tag1, tag2 | <3
| 1 | Place 1 | x.xx | x.xx | tag1 |
......而不是像这样的东西(那是一个加入)
| pid | name | lat | lng | value |
--------------------------------------------
| 2 | Place 2 | x.xx | x.xx | tag1 |
| 2 | Place 2 | x.xx | x.xx | tag2 |
| 1 | Place 1 | x.xx | x.xx | tag1 |
是否可以将上述不同的标签与纯SQL合并?
答案 0 :(得分:2)
加入表格后,您只需要GROUP_CONCAT
。
select p.pid,p.name,p.lat,p.long,group_concat(t.value) as value
from places p
join tags t on p.pid=t.pid
group by p.pid,p.name,p.lat,p.long
答案 1 :(得分:1)
您只需要group by
和group_concat()
。但是,因为您需要places
中的所有列,所以我会使用子查询:
select p.*,
(select group_concat(t.value)
from tags t
where t.pid = p.pid
) as `values`
from places p;
答案 2 :(得分:0)
使用内部联接
select p.pid,p.name,p.lat,p.long,group_concat(t.value) as value
from places p
inner join tags t on p.pid=t.pid
group by p.pid,p.name,p.lat,p.long