带有连接和计数的mySQL查询

时间:2013-04-24 17:57:43

标签: php mysql

我有一个我的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?它似乎不是正确的连接。

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

谢谢!

4 个答案:

答案 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