Php 复杂SQL查询帮助
提供了一组相当标准的相关表格,如客户、发票和行项目。我需要做一个类似“选择所有拥有5个或更多行项目发票的客户”或“选择所有拥有2个以上发票的客户”或最后“选择所有拥有总计超过100美元行项目的客户”的查询Php 复杂SQL查询帮助,php,mysql,cakephp,Php,Mysql,Cakephp,提供了一组相当标准的相关表格,如客户、发票和行项目。我需要做一个类似“选择所有拥有5个或更多行项目发票的客户”或“选择所有拥有2个以上发票的客户”或最后“选择所有拥有总计超过100美元行项目的客户”的查询 我现在很难做到这一点(手动遍历所有记录),我知道这是最低效的方法,但我不知道足够的SQL来构造这些查询。我使用的是PHP5、MySQL和cakephp1.25。对于前两个,您可以使用groupby和HAVING COUNT(*)>4,对于最后一个,您可以使用SUM(field) 如果您想要SQ
我现在很难做到这一点(手动遍历所有记录),我知道这是最低效的方法,但我不知道足够的SQL来构造这些查询。我使用的是PHP5、MySQL和cakephp1.25。对于前两个,您可以使用
groupby
和HAVING COUNT(*)>4
,对于最后一个,您可以使用SUM(field)
如果您想要SQL,请展示您的尝试。说您有:
customers.id
行项目。用户id
line\u项目。numItems
查询将如下所示:
SELECT * FROM customers
JOIN line_items
ON line_items.user_id WHERE line_items.numItems > 5
您的WHERE
子句将根据您想要返回的内容而更改
已经有一段时间没有使用了,但我认为是这样的。下面是第二个帮助,它应该可以帮助您继续使用:
SELECT customer_id, COUNT(*) AS num_invoices
FROM invoices
GROUP BY customer_id
HAVING COUNT(*) > 2
首先,将它们连接在一起:
select c.id
from customers c
left join invoices i on i.customer_id = c.id
left join lineitems li on li.invoice_id = i.id
group by c.id
要筛选行项目超过5个或更多的客户,请添加:
having count(li.id) >= 5
筛选具有两个或多个发票的客户更为棘手,因为我们要加入lineitems表。每个发票可能有多行。因此,为了只计算唯一发票,我们必须在计数中添加distinct
,如:
having count(distinct i.id) >= 2
要筛选商品价值超过100美元的客户,请添加:
having sum(li.cost) > 100
如果要存储单独的行项目计数和价格,则可以在总和中使用数学:
having sum(li.itemcount * li.itemcost) > 100