Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复杂SQL查询帮助_Php_Mysql_Cakephp - Fatal编程技术网

Php 复杂SQL查询帮助

Php 复杂SQL查询帮助,php,mysql,cakephp,Php,Mysql,Cakephp,提供了一组相当标准的相关表格,如客户、发票和行项目。我需要做一个类似“选择所有拥有5个或更多行项目发票的客户”或“选择所有拥有2个以上发票的客户”或最后“选择所有拥有总计超过100美元行项目的客户”的查询 我现在很难做到这一点(手动遍历所有记录),我知道这是最低效的方法,但我不知道足够的SQL来构造这些查询。我使用的是PHP5、MySQL和cakephp1.25。对于前两个,您可以使用groupby和HAVING COUNT(*)>4,对于最后一个,您可以使用SUM(field) 如果您想要SQ

提供了一组相当标准的相关表格,如客户、发票和行项目。我需要做一个类似“选择所有拥有5个或更多行项目发票的客户”或“选择所有拥有2个以上发票的客户”或最后“选择所有拥有总计超过100美元行项目的客户”的查询


我现在很难做到这一点(手动遍历所有记录),我知道这是最低效的方法,但我不知道足够的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