我有两张桌子,就像这样:
records
[id, submitted_date, username]
1, 2012-10-20, jjones
2, 2012-10-22, jsmith
subrecords
[id, record, name, value]
1, 1, Street, 123 Elm
2, 1, City, Chicago
3, 2, Street, 321 Maple
4, 2, City, New York
我正在使用以这种方式保存的表单工具。
但是,在单独的自定义PHP中,我想获得如下的查询结果:
jjones, 123 Elm, Chicago
jsmith, 321 Maple, New York
我该怎么做?到目前为止我能想到的最好的输出就像
jjones, Street, 123 Elm
jjones, City, Chicago
jsmith, Street, 321 Maple
jsmith, City, New York
这不是我需要的。我想在查询返回的数据行中一起得到结果。
答案 0 :(得分:2)
只需加入子记录两次,一次是街道,一次是城市:
select r.username, street.value, city.value
from records r
join subrecords street
on street.record = r.id
and street.name = 'Street'
join subrecords city
on city.record = r.id
and city.name = 'City'
order by r.username;
答案 1 :(得分:0)
我面前没有MySQL服务器来测试它,但是像
那样select records.username, group_concat(subrecords.value separator ', ') as concatenated
from records join subrecords
on records.id = subrecords.record
group by records.username
我不确定它是否有效,因为我没有测试过。如果有任何问题,请告诉我,以便我可以编辑答案,使其更有帮助。
干杯。
答案 2 :(得分:0)
你需要做一些像group_concat这样的东西把“子结果”放到一个单独的字符串中,而且有多个列它可能会变得丑陋......就像〜或者分隔的列和分隔的记录
类似
select a.id, group_concat(concat('~',b.id,b.name,b.value) seperator ',')
from a join b on b.record=a.id
group by a.id
我想你可以将它分解成不同的group_concats:
select a.id, group_concat(b.id seperator ',')
group_concat(b.id seperator ',') ids
group_concat(b.name seperator ',') names
group_concat(b.value seperator ',') values
from a join b on b.record=a.id
group by a.id
无论你在客户端遇到什么样的痛苦都不那么痛苦。
答案 3 :(得分:0)
与之前的答案一样,我还无法测试。如果group_concat导致问题派生表也可能有用吗?
SELECT r.username, s1.value, s2.value
FROM
records r
JOIN
(SELECT value FROM subrecords WHERE name="Street") s1
ON
(r.id = s1.record)
JOIN
(SELECT value FROM subrecords WHERE name="City") s2
ON
(r.id = s2.record)