2017-08-08 62 views
0

這是一段MySQL代碼,它在一個網站的後臺運行。瞭解下面的MySQL邏輯

我想了解new列的含義。 具有單一訂單的任何客戶是否會標記爲新= 1?

代碼如下所示:

select 
a.id_order, 
IF((
     SELECT so.id_order 
     FROM `orders` so 
     WHERE so.id_customer = a.id_customer 
     AND 
     so.id_order < a.id_order 
     LIMIT 1) > 0, 0, 1) as new    // new keyword 

     FROM `orders` a 

     LEFT JOIN `customer` c ON 
     (c.`id_customer` = a.`id_customer`) 

回答

0

首先,我認爲id_order從不爲負或爲零。

然後,如果客戶訂單的ID較小,則查詢返回「0」。意圖是標記第一個訂單。

如果客戶只有一個訂單,那麼它的值將始終爲1,因爲子查詢將返回NULL

我會寫的邏輯:

SELECT o.id_order, 
     (NOT EXISTS (SELECT 1 
        FROM orders so 
        WHERE so.id_customer = o.id_customer AND 
          so.id_order < o.id_order 
        ) 
     ) as is_first_order 
FROM orders o LEFT JOIN 
    customer c 
    ON c.id_customer = o.id_customer; 

LEFT JOIN應該是不必要的,如果所有的訂單都有客戶。事實上,JOIN是沒有必要的,你可以用:

select o.id_order, 
     (NOT EXISTS (SELECT 1 
        FROM orders so 
        WHERE so.id_customer = o.id_customer AND 
          so.id_order < o.id_order 
        ) 
     ) as is_first_order 
FROM orders o ; 
0

「新」在這裏括號中的if語句的列結果的名稱

((
     SELECT so.id_order 
     FROM `orders` so 
     WHERE so.id_customer = a.id_customer 
     AND 
     so.id_order < a.id_order 
     LIMIT 1) > 0, 0, 1) 

IF

(SELECT so.id_order 
FROM `orders` so 
WHERE so.id_customer = a.id_customer 
AND so.id_order < a.id_order 
LIMIT 1) 
大於0

然後「新的」的列的值將是0 否則這將是1