gpt4 book ai didi

mysql - 一对多计算一次查询?

转载 作者:太空宇宙 更新时间:2023-11-03 11:30:44 25 4
gpt4 key购买 nike

我已经有一段时间没有接触后端了。如果这太简单了,请原谅我。我正在使用 Lumen v.5.6.1。

| table.sets     |    | table.indexed_items             |
|----------------| |---------------------------------|
| ID | SET | | ID | setId | itemId | have |
|----|-----------| |----|-------|--------|-----------|
| 1 | set name 1| | 1 | 3 | 1 | 2 |
| 2 | set name 2| | 2 | 3 | 2 | 1 |
| 3 | set name 3| | 3 | 3 | 3 | 4 |
| 4 | 2 | 4 | 1 |
| 5 | 2 | 5 | 3 |
| 6 | 2 | 6 | 1 |

我如何在一个查询中返回,groupedBy/distinct by setId(将名称设置为左连接?)得到这样的返回:

[
setId: 2,
name: 'set name 2',
haveTotal: 5,
],
[
setId: 3,
name: 'set name 3',
haveTotal: 7,
]

最佳答案

这是一个应该有效的原始 MySQL 查询。将其转换为 Laravel 应该不会有太多工作,尽管您可能需要使用 DB::raw 一次或两次。

SELECT
s.ID AS setId,
s.`SET` AS name,
COALESCE(SUM(ii.have), 0) AS haveTotal
FROM sets s
LEFT JOIN indexed_items ii
ON s.ID = ii.setId
GROUP BY
s.ID;

Demo

如果你不想返回在 indexed_items 表中没有条目的集合,那么你可以删除对 COALESCE 的调用,你也可以使用内部连接而不是左连接。

请注意,使用 SET 命名您的表和列不是一个好主意,因为它是 MySQL 关键字。

关于mysql - 一对多计算一次查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50083174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com