Php MySQL-两表查询,带SUM
问题已解决 我有两个表,orders和customers,我想查找订单大于0的所有客户 我目前使用两个查询: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'
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