簡體   English   中英

如何根據第一個查詢結果執行第二個查詢

[英]How to execute second query based on first query result

我有一種情況,我需要根據第一個query結果execute 第二個 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

我的表格和以上查詢結果均已實現,但未獲得product_name。 請在這里幫助我

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

我的問題:如果days_remaining (請參見上面的結果)為0,我想獲取所有product_name

簡而言之,如果days_remaining為0,則獲取所有product_name

您可以使用以下解決方案:

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 ,結果以其標識product_id代表表product 另外,僅當days_remaining為零時, LEFT JOIN才匹配。

如果要過濾結果以僅顯示具有product_name的記錄,則必須在此解決方案的末尾添加以下行: WHERE tn.days_remaining = 0

您可以在這樣的WHERE中這樣做:

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

編輯:不完全是第二個查詢,而是您要查找的結果。

使用您自己的查詢,我對其進行了擴展:

#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
) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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