Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 MySQL-两表查询,带SUM_Php_Mysql_Select_Join - Fatal编程技术网

Php MySQL-两表查询,带SUM

Php MySQL-两表查询,带SUM,php,mysql,select,join,Php,Mysql,Select,Join,问题已解决 我有两个表,orders和customers,我想查找订单大于0的所有客户 我目前使用两个查询: SELECT * FROM customers 及 我想把它转换成一个查询,这样它就可以找到他们在商店里下了一个或多个订单的所有客户 我尝试了以下方法,但无效: SELECT c.*, COUNT(o.customer) AS numOrders FROM customers c, orders o WHERE o.siteid= 'calico'

问题已解决

我有两个表,orders和customers,我想查找订单大于0的所有客户

我目前使用两个查询:

SELECT * FROM customers 

我想把它转换成一个查询,这样它就可以找到他们在商店里下了一个或多个订单的所有客户

我尝试了以下方法,但无效:

SELECT c.*, 
       COUNT(o.customer) AS numOrders 
FROM customers c, 
     orders o 
WHERE o.siteid= 'calico' 
AND o.customer=c.email
(它只给出一个结果,即客户ID 1)

我只需要从customers表中找到orders值和一些值

订单中的客户字段和客户中的id字段的值相同(即订单1由客户5下,客户id 5为“John”)

有没有办法做到这一点


当前的方法是可行的,但是如果有大量的客户,效率会非常低。

您可以这样连接两个表:

SELECT c.* 
FROM customers c
INNER JOIN orders o ON o.customer = c.id

使用
内部联接
只会产生订单表中有条目的客户。

您可以这样联接两个表:

SELECT c.* 
FROM customers c
INNER JOIN orders o ON o.customer = c.id
SELECT c.*
     , COUNT(*) AS numOrders 
FROM customers c
  JOIN orders o 
    ON o.customer = c.id
WHERE o.siteid = 'calico'
GROUP BY c.id

使用
内部联接
只会产生订单表中有条目的客户。

不确定这是否可行,但您可以尝试:

SELECT c.*
     , COUNT(*) AS numOrders 
FROM customers c
  JOIN orders o 
    ON o.customer = c.id
WHERE o.siteid = 'calico'
GROUP BY c.id
SELECT c.*, COUNT(o.customer) AS numOrders FROM customers c 
JOIN orders o on o.customer = c.id 
WHERE o.siteid= 'calico' AND o.customer=c.email AND numOrders > 0
GROUP BY c.id, c.email

不确定这是否有效,但您可以尝试:

SELECT c.*, COUNT(o.customer) AS numOrders FROM customers c 
JOIN orders o on o.customer = c.id 
WHERE o.siteid= 'calico' AND o.customer=c.email AND numOrders > 0
GROUP BY c.id, c.email

第二个查询只返回1行的原因是oyu没有GROUP BY。与许多SQL数据库不同,MySQL允许您将非聚合字段与聚合字段混合使用,即使其SQL在技术上无效,并且结果不可预测

试一试


第二个查询只返回1行的原因是oyu没有GROUP BY。与许多SQL数据库不同,MySQL允许您将非聚合字段与聚合字段混合使用,即使其SQL在技术上无效,并且结果不可预测

试一试


当您按主键分组时,它是技术上有效的SQL(根据SQL-2003+标准)-尽管MySQL并不真正检查这一点,它也允许技术上无效的查询。当您按主键分组时,它是技术上有效的SQL(根据SQL-2003+标准)-尽管MySQL没有真正检查这一点,而且它也允许技术上无效的查询。是否
订购.customer
存储
客户.id
客户.email
?是否
订购.customer
存储
客户.id
客户.email
SELECT c.id, c.email, COUNT(o.customer) AS numOrders 
FROM customers c, orders o 
WHERE o.siteid= 'calico' AND o.customer=c.email
GROUP BY c.id, c.email