0

我有一个我的 sql 数据库并使用 php 来访问它。

我的表看起来像:

航班表 航班 ID、时间、机场

座位表 航班号、座位号

我有以下查询:

SELECT f.FlightID 'ID', Count(*) 'Seats Booked' FROM flights f, seats s  GROUP BY f.FlightID

我希望输出是

已预订的航班 ID 座位

ID Num 座位预订

目前的问题是它显示了这一点:

[{"ID":"0","Seats Booked":"37"},{"ID":"1234","Seats Booked":"37"}] (The output is JSON encoded)

如果你关注我,应该是 10 点和 27 点?它似乎不是正确的加入。

请解释我做错了什么,而不仅仅是一个答案。

谢谢!

4

4 回答 4

3

LMC,

您没有使用该子句进行连接。这就是为什么您为每个分组指令获得总和的原因。

使用您的语法的正确指令应该是这样的:

SELECT f.FlightID 'ID', Count(*) 'Seats Booked' 
FROM flights f, seats s  
where s.FlightId = f.FlightId
GROUP BY f.FlightID

使用内连接语法应该是这样的:

SELECT f.FlightID 'ID', Count(*) 'Seats Booked' 
FROM flights f
inner join seats s  
on  s.FlightId = f.FlightId
GROUP BY f.FlightID

您可以在不使用飞行表的情况下执行此操作。飞行表没有任何区别,因为您要返回一组飞行ID。桌子座位有flightid。下面的陈述应该足够了。如果您不担心没有预订座位的航班,这是真的

SELECT s.FlightID 'ID', Count(*) 'Seats Booked' 
FROM seats s  
GROUP BY s.FlightID

如果您想显示没有预订座位的航班,那么您应该使用左连接到航班。下面的语句将解决这个问题。

SELECT f.FlightID 'ID', Count(*) 'Seats Booked' 
FROM flights f
left join seats s  
on  s.FlightId = f.FlightId
GROUP BY f.FlightID
于 2013-04-24T18:07:25.703 回答
2

如果您只需要航班表中的航班 ID,为什么不这样做:

SELECT s.FlightID, COUNT(s.id) FROM seat s GROUP BY s.FlightID

如果您还需要计算没有座位的航班,请使用:

SELECT f.flightID, COUNT(s.id) FROM 航班 f LEFT JOIN 座位 s ON s.flightID=f.flightID GROUP BY f.flightID

于 2013-04-24T18:13:13.840 回答
1

在这里,您的方法的问题是您没有加入您的表格。我的意思是“Table1”与“Table2”有某种关系。在您的情况下,它是航班号。因此,在另一个表(座位表)中,您将拥有座位数据,但可用于任何特定航班。因此,为了获得匹配的记录,您需要根据 flightid 加入这两个表,以便您为每个航班获得不同数量的座位。

试试这个 sql。

select f.flightid as 'id', count(s.seat_number) as seats_booked
from flight f, seats s
where f.flightid=s.flightid
group by f.flightid 
于 2013-04-24T18:06:52.780 回答
1

首先,您应该使用下面显示的连接语法,因为您的语法有些过时。二、一定要包含where子句

SELECT f.FlightID 'ID', count(*) as "seat count"
INNER JOIN seats s On
f.FlightID = s.FlightID
Where f.FlightID = 'some_id'
GROUP BY f.FlightID
于 2013-04-24T18:00:58.490 回答