2016-10-02 76 views
0

我需要做一個查詢,從兩個不同的表中進行選擇。基本上,我只想從dates表中選擇orders表中沒有掛單的行。MySQL兩個查詢產生一個值

例如,dates表具有7月1日的值,7月2日和7月3日7月2日與在ordersstatus = PEN訂單所以該表將只顯示7月1日和7月3日

查詢1 dates

$sql = "SELECT * FROM dates WHERE DATEDIFF(CURDATE(), date) >= 30 AND `30day`='No'"; 

我還沒有打造爲orders表的查詢,因爲我相信這需要被整合到一個查詢在一起,我不知道該怎麼做。

我知道你可以在一個做兩個SELECT查詢,我知道如何做到這一點,但我不確定如何使第二SELECT查詢由第一SELECT查詢受到影響。

dates數據庫中的列iddateclosed30day60day

orders數據庫中的列iddateorderstatus

我需要這個查詢標誌和狀態PENBOFBO任何訂單。

預先感謝您!

樣本數據:

dates表:

Date - 30-day Value 

July 1 - No 

July 2 - No 

July 3 - No 

orders表:

Date - Orders - Status 

July 1 - 7123456 - PEN 

July 1 - 7123457 - SHI 

July 1 - 7123487 - SHI 

July 2 - 7256789 - SHI 

July 2 - 7256790 - SHI 

July 2 - 7256791 - SHI 

July 3 - 7215368 - SHI 

July 3 - 7125369 - SHI 

July 3 - 7659876 - BO 

July 4 - 7569235 - FBO 

July 4 - 7986585 - FBO 

預期結果:

Date 

July 2 

July 3 

略日期:

Date - Reason 

July 1 - because there is an open order 

July 4 - because there is an open order 

我不想要一個省略表 - 只是想表明什麼也不會顯示出來。

+0

怎麼樣左連接行的樣本?使用'group by','擁有count = 0' – Drew

+0

請提供更多關於您的表的樣子! (列名等) –

+0

@ M.S。 - 更新。 –

回答

2

可能是這一點,你正在尋找(我不知道你的架構,以便爲加入我使用了一個名爲key

$sql = "SELECT * 
     FROM dates 
     LEFT JOIN orders on (dates.date = orders.date and orders.status not in ('PEN','BO', 'FBO')) 
     WHERE DATEDIFF(CURDATE(), dates.date) >= 30 
     AND `30day`='No'"; 

否則列,如果你需要的狀態不PEN,BO什麼FBO那麼你可以

..

$sql = "SELECT * 
     FROM dates 
     LEFT JOIN orders ON dates.date = orders.date 
     WHERE DATEDIFF(CURDATE(), dates.date) >= 30 
     AND `30day`='No' 
     AND orders.status NOT IN ('PEN','BO', 'FBO' ) "; 

..

$sql = "SELECT * 
     FROM dates 
     INNER JOIN orders ON dates.date = orders.date 
     WHERE DATEDIFF(CURDATE(), dates.date) >= 30 
     AND `30day`='No' 
     AND orders.status IN ('PEN','BO', 'FBO' ) "; 

基礎上提供,應返回你需要

$sql = " SELECT * 
      FROM dates 
      WHERE DATEDIFF(CURDATE(), date) >= 30 
      AND `30day`='No' 
      AND date not in ( 
         select date 
         from orders 
         where order.status IN ('PEN','BO', 'FBO' ) 
        ) "; 
+0

謝謝你的回答!我更新了我的信息(包括專欄),因爲我不是100%確定如何根據您的建議修改此查詢,我很抱歉。我希望你能協助。 –

+0

@BrandinArsenault我有更新答案使用日期加入..希望是你需要.. – scaisEdge

+0

你有任何建議根據我的狀態更新。我需要這個適用於狀態'PEN''BO''FBO'。謝謝! –