我正在做订票系统
让我尝试解释一下我需要什么。我有一个表格,其中包含旅行日期、人数、起点、终点、机票类型和返回日期。门票可以是单程票、一日票或往返票(买家可以选择返程日期)。
问题是,假设 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')
)
为了清楚起见,将目的地列重命名为 origin
和 destination
也是一个好主意,并将地名放入字段中。因此您的查询将如下所示:
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/