2014-09-05 66 views
0

構建一個價格表我需要顯示房企的表是這樣的: enter image description here有效地從MySQL數據庫

有18日期列,他們不會全部是相同的關稅。在18列中,可能有1到6種不同的關稅。出於這個原因,我在我的數據庫中有關稅和價格表。

tariff:  tariff_id  room_id 

price:  tariff_id  double_weekday  single_weekday  double weekend  single_weekend  extrabed 

然後有一個日期表:

dates:  date  tariff_id hotel_id  + some more fields 

我的問題是找到構建以高效的方式我的MySQL查詢的最佳方式。顯然,我不想爲表中的每個單元格運行查詢。

我已經開始查找適用於顯示日期範圍的關稅。

$query_tariff = "SELECT tariff_id, date FROM dates WHERE (date BETWEEN '$firstdate' AND '$lastdate') AND hotel_id = '$hid'"; 

然後,我可以很容易地將該結果減少到唯一的tariff_id值。

然後,我有一個查詢來獲取所有對應於每個如果關稅價格:

while ($row_tariff = mysql_fetch_assoc($tariff)) { 
$tariff_id = $row_tariff['tariff_id']; 
$query_price = "SELECT * FROM price WHERE tariff_id = '$tariff_id'"; 
} 

我的問題就來了下一階段。當我連續寫一行時,我怎麼知道使用哪個價格?我有一種感覺,這可能需要數據透視表,但我已經完成了一些閱讀並完全丟失了。或者也許解決方案在於使用數組,我能夠理解的機會稍大一些。

回答

0

簡單的辦法是把它分解成類似(僞代碼)

foreach room_type 
    // write row start & header 
    foreach interested_date 
     // write cell for the best rate/availability on this interested_date, for this room_type 
    next 
    // write row end 
next 

現在,你可以環上的兩個查詢的結果,或者你可以合併成一個怪物查詢,用適當的邏輯寫一個新的行結束/開始&標題

+0

問題是「foreach感興趣的日期」內發生了什麼。似乎我不得不在那裏查詢以獲取價格信息。因此,如果有六種房間類型,那就是6×18 = 108個查詢來顯示錶格一次。 – TrapezeArtist 2014-09-05 15:49:19

+0

或查詢該房型的所有房價。就我個人而言,我將價格表設計爲一種房價的一天房價。然後,您可以查詢相關聯接,其中可用日期位於搜索的開始日期和結束日期之間。 – 2014-09-05 16:01:12