2011-10-04 98 views
0

当天是4,月份是10. 如何查询月份在start_month和end_month范围之间的价格,以及他们的日期也在一个范围之间?我如何查询开始日期/月份和结束日期/月份之间的价格

start_day,start_month,end_day和end_month可以在数据库中变量。

截图数据库: Database http://f.cl.ly/items/0D1g1k3l1Y2h1D413q16/Screen%20Shot%202011-10-04%20at%2014.38.23.png

我当前的查询:

$price = FrontendModel::getDB()->getVar('SELECT p.price FROM appartments_pricing as p WHERE (p.days_start >= ? AND p.months_start >= ?) AND (p.days_end <= ? AND p.months_end <= ?) AND p.appartment_id = ?', array($day,$month, $day, $month, $appartment_id));

+1

以及您当前的查询出了什么问题? – jancha

+0

我从来没有得到想要的结果。价格为“15”的记录 –

回答

0

如果你想一天躺在的范围days_start <= day <= days_end,那么你需要吨o切换您的查询(相同的月份):

$price = FrontendModel::getDB()->getVar('SELECT p.price FROM 
appartments_pricing as p WHERE (p.days_start <= ? AND p.months_start <= ?) AND 
(p.days_end >= ? AND p.months_end >= ?) AND p.appartment_id = ?', 
array($day,$month, $day, $month, $appartment_id)); 
+0

Thx,适合我。 –

+0

我怀疑这个解决方案是不正确的。尝试(11月9日> 10月20日)。该月(11> 10)将是真实的,但日间比较将失败(9> 20)。我建议使用@jancha – romaninsh

+0

解决方案@romanish如果我们假设“days_start months_start”是开始日期,“days_end months_end”是结束日期,那么是的,我同意jancha的解决方案更好。问题含糊不清,“月份介于start_month和end_month范围之间,他们的日期也在一个范围之间?”并没有真正指出start_day和start_month是否相关。 – nachito

1

好吗另一种选择:

mysql> select 
      ap_id, price, 
      date(concat('2000', '-', months_start, '-', days_start)) as start, 
      date(concat('2000', '-', months_end, '-', days_end)) as end 
      from x 
      having date('2000-10-4') > start and date('2000-10-4') < end; 

+-------+-------+------------+------------+ 
| ap_id | price | start  | end  | 
+-------+-------+------------+------------+ 
| 32 | 15 | 2000-01-01 | 2000-12-31 | 
+-------+-------+------------+------------+ 
+0

感谢您的回复,但我的数据库结构不同。 所以你的查询不会与我的工作。或者,这是不可能做我的数据库结构? –

+0

它与ap_id相同。将其更改为appartment_id,就是这样。 – jancha

+0

不是,我有2个额外的列。 我分别存储开始日期,开始月份,结束日期和结束月份。 但nachito给了我们一个工作解决方案。 –

相关问题