2017-07-07 58 views
2

如何执行第二个查询我有一个情况我需要一个execute第二query基于第一query结果。基于第一查询结果

这是我第一次查询结果:

id current_date starts_on ends_on Product_id days_remaining 
1 2017-06-21T12:00:00 2017-06-20T12:00:00Z 2017-06-23T12:00:00Z 3 2 
2 2017-06-21T12:00:00 2017-06-01T12:00:00Z 2017-06-03T12:00:00Z 4 0 
3 2017-06-21T12:00:00 2017-06-01T12:00:00Z 2017-06-03T12:00:00Z 7 0 
4 2017-06-21T12:00:00 2017-07-01T12:00:00Z 2017-07-03T12:00:00Z 5 12 

在这里你可以看到remaining_days有2个零(0)作为对occurence结果,我想所有product_nameproduct

我的两个表和Query for Above结果都实现了,但是对于 获取product_name没有实现。请帮我在这里

这里是我的sqlfiddle:http://sqlfiddle.com/#!9/5bf34/1

我的问题:我想所有product_name如果days_remaining(见上结果)是0

总之

如果days_remaining为0,则获取所有product_name

回答

1

您可以采用如下方案:

SET @mycurrentDate = '2017-06-21T12:00:00'; 
SELECT p.product_name, tn.* FROM (
    SELECT 
     id, 
     @mycurrentDate AS `current_date`, 
     `tn`.`start` AS `starts_on`, 
     `tn`.`end` AS `ends_on`, 
     `tn`.`product_id` AS `Product_id`, 
     IF(`tn`.`end` >= @mycurrentDate, DATEDIFF(`tn`.`end`, @mycurrentDate), 0) AS `days_remaining` 
    FROM `booking` AS `tn` 
)tn LEFT JOIN product p ON tn.`Product_id` = p.product_id AND tn.`days_remaining` = 0 
-- WHERE tn.days_remaining = 0 

演示:http://sqlfiddle.com/#!9/5bf34/18/1

解释:

我包你的查询转换为FROMLEFT JOIN到您的结果关于其身份的表productproduct_id 。另外,LEFT JOIN仅在days_remaining为零时才匹配。

如果要过滤结果以仅显示product_name的记录,则必须在此解决方案的末尾添加以下行:WHERE tn.days_remaining = 0

1

你可以做,在这样的地点:

SELECT 
    tn.id, 
    p.product_name, 
    @mycurrentDate AS `current_date`, 
    `tn`.`start` AS `starts_on`, 
    `tn`.`end` AS `ends_on`, 
    `tn`.`product_id` AS `Product_id` 
FROM `booking` AS `tn` 
JOIN product as `p` on p.product_id = tn.product_id 
WHERE IF(`tn`.`end` >= @mycurrentDate, 
     DATEDIFF(`tn`.`end`, @mycurrentDate), #show days until event ends 
     0 #the event has already passed 
    ) = 0 

小提琴:http://sqlfiddle.com/#!9/5bf34/25

编辑:不完全是一个第二个查询,但你正在寻找的结果。使用自己的查询

1

,我扩大了它:

#assume this is the date as NOW() 
SET @mycurrentDate = '2017-06-21T12:00:00'; 
SELECT * FROM product WHERE product_id IN (
    SELECT product_id FROM (
    SELECT 
     id, 
     @mycurrentDate AS `current_date`, 
     `tn`.`start` AS `starts_on`, 
     `tn`.`end` AS `ends_on`, 
     `tn`.`product_id` AS `Product_id`, 
     IF(`tn`.`end` >= @mycurrentDate, 
     DATEDIFF(`tn`.`end`, @mycurrentDate), #show days until event ends 
     0 #the event has already passed 
    ) AS `days_remaining` 
    FROM `booking` AS `tn` 
) tmp1 
    WHERE `days_remaining` = 0 
) 
相关问题