【发布时间】:2020-05-15 12:38:12
【问题描述】:
(PHP) 我有一个带有主表的数据库,还有一个表,其值对应于主表中的特定行。请在下面查看这些表格的简化版本:
table 'master'
id
table 'times'
id
master_id
type
amount
'master'中的某些行在'times'中没有对应的行,而其他行有多个对应的行。
我要做的是显示'master'的id,然后在'times'中为每个'type'添加'amount'列。
我考虑过使用 LEFT JOIN,我最终会得到这个(例如):
$query = "SELECT master.id, times.type, times.amount
FROM master
LEFT JOIN completion_times ON master.id = completion_times.ticket_id
ID TYPE AMOUNT
1 NULL NULL
2 "a" 30
2 "b" 20
etc. (hundreds of rows)
但我真的需要这样的结果:
array() {
[0]=>
array() {
["id"]=>
string(5) "2"
["times"]=>
array() {
array() {
["type"]=>
string(5) "a"
["amount"]=>
string(5) "30"
}
array() {
["type"]=>
string(5) "b"
["amount"]=>
string(5) "20"
}
}
}
是否可以编写一个 SQL 查询来完成这样的事情?或者我应该只对所有主行执行一次 foreach,并在该循环内进行辅助查询,以提供“times”表中的相应行?或者也许有另一种理想的方式来做到这一点?
【问题讨论】:
-
好吧,为什么我被否决了?我尽我所能写得很好,我很高兴改进它。请告诉我我可以做些什么来让它变得更好。
-
不要进行迭代查询!!! 不是我的反对意见,但是您的查询在哪里使用 GROUP BY 子句和 SUM() 调用?我不确定你被困在哪里。您想显示所有主 ID 吗?可能有
0计数?供志愿者使用的 dbfiddle 演示链接在哪里? stackoverflow.com/q/41230921/2943403 , stackoverflow.com/a/50516267/2943403