mysql-检索许多结果作为输入参数的计数

时间:2019-03-27 16:31:53

标签: mysql sql

我想选择3个不同日期的房间价格。我有日期和room_id。 PRICES_CAL表如下:

id  room_id date_from   date_to   price 
1   1   2019-03-01  2019-04-01  100 
2   1   2019-04-02  2019-06-30  200 
3   1   2019-07-01  2019-08-31  400 
4   1   2019-09-01  2019-10-30  300 

问题是,当所有三个日期都在相同的date_from-date_to间隔中时,我的查询返回一行。

例如,要搜索日期20190327、20190328、20190329的价格,我使用查询:

SELECT price 
FROM PRICES_CAL 
WHERE room_id = 1 AND ( 
      (date_from <= 20190327 AND date_to >= 20190327 ) 
   OR (date_from <= 20190328 AND date_to >= 20190328 ) 
   OR (date_from <= 20190329 AND date_to >= 20190329 ) 
) ORDER by date_from ASC; 

不幸的是,我只有一个结果:

price
100 

我想检索三行结果,我提供的每个日期都会得到一行。

除其他“无希望”尝试外,我已经尝试过将"SELECT RAND(), price ..."放在每个OR条件的不同行中,并希望获得3个结果,但我仍会检索到一个结果。 还有这个:

SELECT @mydd, price 
FROM PRICES_CAL 
WHERE room_id = 1 AND ( date_from <= @mydd AND date_to >= @mydd  ) 
AND @mydd in (20190327, 20190328, 20190329) 
ORDER by date_from;

它不起作用。它给出零结果。 一个结果也可以,但是主要问题是当我得到2个结果时,我将不知道中间的input_date属于哪个结果。

我想避免执行2条不同的语句以提高性能,或者避免选择date_from,date_to,price并与我的日期进行比较,以确定我的中间输入日期所属的位置。

理想的情况是仅使用一个query.execute解决问题。 在检索结果集并从表中选择所有内容时,我可以使用while语句中的代码进行排序,但是我也想学习如何使用查询。 理想的解决方案是获得三个结果

100
100
100

或者更好,

20190327 100
20190328 100
20190329 100

任何建议都值得欢迎。预先感谢。

3 个答案:

答案 0 :(得分:0)

要获取单独的行,您需要每个日期运行一个查询,然后UNION。例如:

select *
from (
  SELECT '2019-03-27' as date_from, price 
  FROM PRICES_CAL 
  WHERE room_id = 1 AND date_from <= '2019-03-27' AND date_to >= '2019-03-27'
  UNION
  SELECT '2019-03-28' as date_from, price 
  FROM PRICES_CAL 
  WHERE room_id = 1 AND date_from <= '2019-03-28' AND date_to >= '2019-03-28'
  UNION
  SELECT '2019-03-29' as date_from, price 
  FROM PRICES_CAL 
  WHERE room_id = 1 AND date_from <= '2019-03-29' AND date_to >= '2019-03-29'
) x
order by date_from ASC; 

答案 1 :(得分:0)

您可以将请求的日期放在单独的(临时)表中,然后将两个表结合在一起:

SELECT   my_dates_table.requested_date,
         prices_cal.price
FROM     my_dates_table
JOIN     prices_cal
  ON     prices_cal.room_id = 1
 AND     my_dates_table.requested_date BETWEEN prices_cal.date_from AND prices_cal.date_to
ORDER BY my_dates_table.requested_date;

如果间隔不连续(某些LEFT OUTER JOIN与连续的date_to之间存在间隙),则应尝试使用date_from

这当然假设prices_cal表中的各个间隔是不同的。

答案 2 :(得分:0)

另一种选择是使用.image,如下所示:

def update_screen(rainfall):
    screen.fill((135, 206, 235))
    print(len(rainfall))

    rainfall.update();
    rainfall.draw(screen)        

    pygame.display.flip()

while run:

    update_screen(rainfall)