php - mysql中的机票预订查询,基于日期、目的地和返回日期

标签 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')
";

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

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

这是正在运行的自动取款机,但我 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')
)";

最佳答案

我认为你所得到的实际上是正确的,减去一个拼写错误(你有“='Daily'”而不是“='daily'”)。这是我的版本:

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'
        )
    )

您可以只使用此查询两次,但切换回程的出发地和目的地。

关于php - mysql中的机票预订查询,基于日期、目的地和返回日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20713703/

相关文章:

javascript - 如何计算点击次数并在循环javascript中更改其值?

PHP 包括与 OOP

php - 如何使用 MYSQL 将 Max 函数与组一起使用

mysql - MySQL 是否会在更新时覆盖具有相同值的列?

mysql - 使用动态 SQL 语句计算表中每一行的总列

PHP MySQL - SELECT SUM 返回问题

php - 通过 php domdocument 解析器获取文档元素的子元素

php - 当我尝试为我的数据库播种时出现错误

mysql - PHP/MySQL - 具有 3 个(而不是通常的 2 个)列的映射表来继承权限

mysql - 如何根据值连接重复值