基于日期,目的地和返回日期的mysql票务预订查询

时间:2013-12-20 23:46:22

标签: php mysql

我正在做票务预订系统

让我试着解释一下我需要什么。我有包含旅行日期,人数,起点,终点,票种类型和退货日期的表格。门票可以是单程,每日或返程票(买家可以选择返回日)。

问题是,如果5人为2013年12月21日购买机票,对于目的地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')
";

如果名字上的某些字符串不正确,那是因为我在这篇文章中将字段名称从我的语言翻译成英语:(

我只是在寻找有关如何处理此查询的一些提示...提前感谢。

这是什么工作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')
)";

1 个答案:

答案 0 :(得分: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'
        )
    )

您可以只使用此查询两次,但切换回程的起点和终点。