我陷入了一个问题很久了。
我有一张table给你 orders
对于客户,我想得到4种类型的结果,如 1st: All orders with status=place
那么 2nd: All orders with status=place and customer is new
(此客户的订单表中没有以前的记录),
那么 3rd: All orders with status=place and customer have at least 1 order delivered and never returned previous order
,
那么 4th: All orders with status=place and customer have atleast 1 order with status=returned
第一步的查询工作正常,但我不知道如何得到其他结果。我知道这就像一个作业,但我需要帮助。
我的第一步尝试
SELECT o.order_id, o.customer_id, o.order_status_id,
FROM `order` o
WHERE (o.order_status_id = '1'
AND o.payment_code <> 'paytabs'
AND o.payment_code <> 'pp_express')
ORDER BY o.order_id DESC
这给了我第一步的完美结果。我使用的是opencart 2.2.0.0
数据库结构
|order_id |status | payment_code |customer_id |
|---------|-------|--------------|------------|
| 10 | place | cod | 5 |
| 11 | delvr | cod | 4 |
| 12 | return| pp_express | 5 |
| 13 |process| paytabs | 2 |
任何帮助或建议都将不胜感激。你还需要什么就问我。
4条答案
按热度按时间sf6xfgos1#
我认为当你想用一个查询来实现这一点时,应该使用union。
另一方面,当同一个顾客遇到两个顾客时,你只会看到一个。
https://www.w3schools.com/sql/sql_union.asp
1wnzp6jl2#
不知道你的数据库结构,但我会尝试。。。
广告2:
因此,广告4:
现在为3:
顺便说一句:我强烈建议重命名表“order”,因为“order”是一个sql关键字。
n7taea2i3#
对于第二个查询:您只需向sql:and user\u id=0添加一个and子句
如果这是一个新用户,则假定插入了一个用户id=0的新订单
ogq8wdun4#
查询:查询是根据你的问题,你问和订单表结构(我认为你没有创建任何列,如创建和更新在)。
选择*from orders where status='地点';
选择orders.order\u id,orders.customer\u id from orders where status='place'group by order\u id,customer\u id having count(customer\u id)=1;
选择a.order\u id,a.customer\u id from orders a where a.status in(选择b.status from orders b where a.order\u id=b.order\u id and status<>'return')和a.status='place按a.order\u id分组,a.customer\u id having count(a.customer\u id)>=1;
选择a.order\u id,a.customer\u id from orders a where a.status in(选择b.status from orders b where a.order\u id=b.order\u id and status='return')和a.status='place,按a.order\u id分组,a.customer\u id having count(a.customer\u id)>=1