我有一个查询,其中选择了这样的特定发票:
SELECT i.*
FROM invoices i
WHERE i.id = 15
我还需要选择属于此发票的所有产品。我使用以下查询来做到这一点:
SELECT i.*, p.*
FROM invoices i
LEFT JOIN pivot pi
ON pi.invoice_id = i.id
LEFT JOIN products p
ON pi.product_id = p.id
WHERE i.id = 15
现在我想知道,如何使用count()
并计算发票的产品数量?
我想要这样的输出:
+------+--------------+------+-----------+---------+
| i.id | i.number | p.id | p.name | count() |
+------+--------------+------+-----------+---------+
| 15 | 123456 | 3 | SX12 | 5 |
| 15 | 123456 | 17 | MGS2 | 5 |
| 15 | 123456 | 14 | BFE12-3 | 5 |
| 15 | 123456 | 32 | LG2-1 | 5 |
| 15 | 123456 | 6 | VBDS2 | 5 |
+------+--------------+------+-----------+---------+
答案 0 :(得分:-1)
这是{% url ... %}
的工作。
尝试这样的事情:
GROUP BY
通过使用SELECT i.id, i.number, p.id, p.name, IFNULL(COUNT(*),0) product_count
FROM invoices i
LEFT JOIN pivot pi ON pi.invoice_id = i.id
LEFT JOIN products p ON p.id = pi.product_id
WHERE (whatever you need)
GROUP BY i.id, i.number, p.id, p.name
操作,我猜想您希望发票显示在结果集中,即使它没有关联的产品。 LEFT JOIN
函数使这些行包含IFNULL()
而不是null。