簡體   English   中英

多個條件與加入

[英]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關鍵字。

我想在一個查詢中要使用Union的情況。

其他方式,當同一位客戶遇到2個競爭條件時,您只會看到一個。

https://www.w3schools.com/sql/sql_union.asp

對於第二個查詢:您可以在SQL中添加AND子句:AND user_id = 0

如果這是一個新用戶,則假定插入了一個新訂單,其中user_id = 0

查詢:查詢是根據您所問的問題,並為表結構排序(我正在考慮尚未創建諸如created_at和updated_at之類的任何列)。

  1. 從狀態=“地點”的訂單中選擇*;

  2. 從狀態為'place'的訂單中選擇orders.order_id,orders.customer_id。GROUP BY order_id,customer_id HAVING COUNT(customer_id)= 1;

  3. 從訂單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;

  4. 從訂單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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM