2013-12-20 30 views
0

我在做票務預訂系統在mysql中根據日期,目的地和返回日期查詢票務查詢

讓我試着解釋我需要什麼。我有包含旅行日期,人數,起點,終點,票證類型和退貨日期的表格。門票可以是單程,每日或回程車票(買家可以選擇返程日期)。

這裏是問題,如果5人購買票21.12.2013可以說,目的地A到B,但他們都購買每日票,這意味着他們將全部返回當天,他們的目的地將B到A返回的時間。

還有一人買車票2013年12月21日但從目的地B到A,我需要的人的總和爲6

我也產生在我的車票條形碼的一些,所以如果買家每天選擇或回程票,我需要兩個查詢,一個用於計算開始日期的人數(預訂),第二個用於返回日期。

所以基本上表看起來像這樣

id | date | persons | paid | destinationA | destinationB | typeofticket |return_date 
--+----------+----------+------+--------------+--------------+--------------+---------- 
1 |21.12.2013| 5  | yes |  1  |  2  | daily  |21.12.2013 
2 |21.12.2013| 1  | yes |  2  |  1  | one-way |21.12.2013 
2 |21.12.2013| 2  | no |  2  |  1  | one-way |21.12.2013 

因此,任何建議,我應該我的查詢看起來像?我有這樣的事情(這顯然是錯誤的):

$query1 = " 
SELECT date, SUM(persons) totalpersons FROM table_name 
WHERE date='$date' AND (destinationA ='$destinationA') OR 
(destinationA ='$destinationB' AND typeofticket = 'Daily') 
"; 


$query2 = " 
SELECT date, SUM(persons) totalpersons FROM table_name 
WHERE date='$return_date' AND (destinationA ='$destinationA') OR 
(destinationB ='$destinationA' AND typeofticket = 'Daily') 
"; 

如果一些關於名稱的字符串是不正確的,這是因爲我是翻譯的字段名稱frommy語言爲英語這個崗位:(

我只是尋找一些提示,如何接近這個查詢的...提前感謝。

這是什麼工作atm,但我100%肯定我仍然缺少的東西:))是的,我需要查詢只看付費門票:

$query_b1 = " 
SELECT date, SUM(persons) totalpersons FROM table_name 
WHERE date='$date' AND paid='yes' AND (destA='$destA' AND destB='$destB' OR 
(destB='$destA' AND typeofticket ='Daily') 
)"; 
+0

您可以考慮爲旅程單獨建模一張票。即每張票可以有一個或多個相關旅程。然後可以使用一個簡單的查詢組來獲取您需要的計數。 –

+0

是的,我也在考慮這一點,但必須有一些查詢將以這種方式工作,所以我不必重寫代碼。 – Tomek

+0

你可以發佈一些更多的樣本數據和你的預期結果嗎?從你的樣本數據我看到8人從那天的2日到1日 –

回答

0

我認爲你所擁有的實際上是正確的,減去一個錯字(你有「='每日'」而不是「='每日'」)。這裏是我的版本:

SELECT `date`, SUM(persons) as totalpersons 
FROM table_name 
WHERE `date`='$date' 
    AND (
     (destinationB > destinationA) 
     OR (destinationA > destinationB AND typeofticket='daily') 
    ) 

這也可能是你的目的地列重命名爲origindestination爲清楚起見,並把地名在田地裏是個好主意。因此,您的查詢將如下所示:

SELECT `date`, SUM(persons) as totalpersons 
FROM table_name 
WHERE `date`='$date' 
    AND (
     (
      origin = '$origin' 
      AND destination = '$destination' 
     ) 
     OR (
      origin = '$destination' 
      AND destination = '$origin' 
      AND typeofticket='daily' 
     ) 
    ) 

您可以只使用此查詢兩次,但切換回程的起點和目的地。

+0

好吧,我接近最終的解決方案。這是工作,但它仍然有一些錯誤。 – Tomek