我正在做票务预订系统
让我试着解释一下我需要什么。我有包含旅行日期,人数,起点,终点,票种类型和退货日期的表格。门票可以是单程,每日或返程票(买家可以选择返回日)。
问题是,如果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')
)";
答案 0 :(得分:0)
我认为你所拥有的实际上是正确的,减去一个错字(你有“='每日'”而不是“='每日'”)。这是我的版本:
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'
)
)
您可以只使用此查询两次,但切换回程的起点和终点。