【问题标题】:Mysql date range priceMysql日期范围价格
【发布时间】:2016-06-10 21:25:39
【问题描述】:

我想根据季节日期显示价格。

示例:

电影有不同的价格,根据日期确定

season_1 = 2016-05-01 - 2016-08-31 价格为 100 美元
season_2 = 2016-09-01 - 2017-04-31 价格为 50 美元

我在表格中有两个日期

season_tbl:

id    |   start_date   |  end_date   |  name
--------------------------------------------------
1     |  2016-05-01    | 2016-08-31  | season_1
2     |  2016-09-01    | 2017-04-30  | season_2

movies_price_tbl:

id    |   season_id    |  name            |  price | movie
------------------------------------------------------------
1     |  1             | Gladiator movie  | 100$   |  1
2     |  2             | Gladiator movie  | 50%    |  1

我的期望:

当用户在搜索中输入 start 2016-06-01 end 2016-07-30 并选择该日期的电影放映价格 ID。在这种情况下,显示 season_1 价格100$。 如果用户输入 start 2016-09-23 end 2017-01-21 show season_2 price

我尝试但不工作:

WHERE m.movie_id = 1 AND s.start_date <= '2016-05-01' AND s.end_date >= '2016-07-20'

【问题讨论】:

  • start_date 和 end_date 列的数据类型是什么?
  • 列的类型首先是date,我将其更改为varchar
  • 现在在 db 中是 varchar 吗? ..您的查询得到什么结果?显示您使用的所有查询代码..

标签: mysql sql database date


【解决方案1】:

也许这个查询会做:

SELECT movies_price_tbl.price FROM season_tbl 
  INNER JOIN movies_price_tbl ON season_tbl.id = movies_price_tbl.season_id 
    WHERE movies_price_tbl.movie = '1' 
    AND season_tbl.start_date <= '2016-05-01' 
    AND season_tbl.end_date >= '2016-07-20'

PS:你应该去掉movies_price_tbl 中的name 列。没必要,因为有movie_id

【讨论】:

  • 这个例子有效,但是当我输入开始日期2016-01-01 到结束日期2016-02-01 返回null 时,这个例子不起作用。但所有其他范围内的工作。
  • 还应该返回什么 - 您在 2016-01-01 和 2016-02-01 之间没有定义季节
【解决方案2】:

试试这个查询

SELECT price FROM movies_price_tbl WHERE movie_id = 1 && season_id = (select id from season_tbl where start_date <= '2016-05-01' && end_date >= '2016-07-20')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多