2016-10-02 66 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'。谢谢! –