2011-10-04 105 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給了我們一個工作解決方案。 –

相關問題