我有一个我的sql DB并使用php来访问它。
我的表格如下:
航班表航班ID,时间,机场
座位表 航班ID,座位号
我有以下查询:
SELECT f.FlightID 'ID', Count(*) 'Seats Booked' FROM flights f, seats s GROUP BY f.FlightID
我希望out out是
预订航班ID席位
ID Num座位簿
问题是目前它显示了这个:
[{"ID":"0","Seats Booked":"37"},{"ID":"1234","Seats Booked":"37"}] (The output is JSON encoded)
如果你跟着我,应该是10和27?它似乎不是正确的连接。
请解释我做错了什么而不仅仅是答案。
谢谢!
答案 0 :(得分: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
您可以在不使用航班表的情况下执行某些操作。飞行表没有任何区别,因为你正在返回一组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
答案 1 :(得分:2)
如果您不需要航班表中的航班ID以外的任何内容,为什么不这样做:
SELECT s.FlightID,COUNT(s.id)FROM席位s GROUP BY s.FlightID
如果您还需要计算没有座位的航班,请使用:
选择f.flightID,COUNT(s.id)FROM航班f LEFT JOIN席位开启 s.flightID = f.flightID GROUP BY f.flightID
答案 2 :(得分: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
答案 3 :(得分:1)
此处您的方法存在的问题是您没有加入表格。加入的意思是“Table1”与“Table2”有关,有一些关系。在你的情况下,它是航班ID。因此,在另一个表(座位表)中,您将获得座位数据,但这可用于任何特定航班。因此,为了获得匹配记录,您需要根据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