[英]multiple where conditions with joining
很久以來,我一直陷入困境。
我有一張客戶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 |
任何幫助或建議,將不勝感激。 問我您還有什么需要的。
不確定是否了解您的數據庫結構,但我會嘗試...
廣告2:
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')
AND o.customer_id NOT IN (SELECT o2.customer_id from order o2 WHERE o2.order_id != o.order_id AND o2.customer_id = o.customer_id)
ORDER BY o.order_id DESC
因此,廣告4:
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')
AND o.customer_id IN (SELECT o2.customer_id from order o2 WHERE o2.order_status = 'returned')
ORDER BY o.order_id DESC
現在開始3:
SELECT o.order_id, o.customer_id, o.order_status_id,
FROM `order` o
WHERE (o.order_status_id = '...?')
AND o.customer_id NOT IN (SELECT o2.customer_id from order o2 WHERE o2.order_status = 'returned')
AND o.customer_id IN (SELECT o3.customer_id from order o3 WHERE o3.order_status = 'delivered')
ORDER BY o.order_id DESC
順便說一句:我強烈建議重命名表“ order”,因為“ order”是一個SQL關鍵字。
對於第二個查詢:您可以在SQL中添加AND子句:AND user_id = 0
如果這是一個新用戶,則假定插入了一個新訂單,其中user_id = 0
查詢:查詢是根據您所問的問題,並為表結構排序(我正在考慮尚未創建諸如created_at和updated_at之類的任何列)。
從狀態=“地點”的訂單中選擇*;
從狀態為'place'的訂單中選擇orders.order_id,orders.customer_id。GROUP BY order_id,customer_id HAVING COUNT(customer_id)= 1;
從訂單a中選擇a.order_id,a.customer_id(在其中a.status處選擇)(從訂單b中選擇b.status,其中a.order_id = b.order_id和狀態<>'return')和a.status ='place'GROUP BY a.order_id,a.customer_id HAVING COUNT(a.customer_id)> = 1;
從訂單a中選擇a.order_id,a.customer_id(其中a.status位於)(從訂單b中選擇b.status,其中a.order_id = b.order_id並且status ='return')和a.status ='place'GROUP BY a .order_id,a.customer_id有COUNT(a.customer_id)> = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.