内部加入问题PHP

时间:2016-05-12 14:22:25

标签: php mysql

我有三个表:绑定,站点和时间

Bound有2列:boundID和boundName

Station有3列:stationID stationName boundID

时间有4列:timeID departureTime tramID stationID

我想显示用户在表单中输入的startStation和endStation,如果用户在文本字段中输入的工作站具有相同的boundID,则显示时间。目前,这是我设法做的所有事情,似乎无法得到结果。任何帮助将不胜感激!

    //display tram times from one station to another        
    ELSE if($startStation != '' && $endStation !='' && $DepartureTime =='' && $DepartureTime2 =='')
    $query ="SELECT b.boundName, s.stationName, t.departureTime
    FROM Station s, Time t, Bound b
    INNER JOIN Bound b
    ON S.boundID=B.boundID
    WHERE s.stationName = '$startStation'AND'$endStation'";

我在尝试此操作时收到此消息:"不是唯一的表/别名:' b'"

这是我的数据示例:

stationID stationName boundID

5 | CitySquare | 2 ________________________________________________________________________________ boundID boundName

2 |南 - 南________________________________________________________________________________

timeID departureTime tramID stationID

1 | 07:18:00 | 1 | 5

如果boundID相同,则预期结果是用户能够插入startStartion和endStation并获取出发时间。

这是我要输出的结果

绑定名称|启动站|终点站|出发时间

South-SouthBound | Stourton | CitySquare |九点49分○○秒

3 个答案:

答案 0 :(得分:0)

更改以下代码部分

INNER JOIN Bound b

INNER JOIN Bound c

并更改列的别名。您的查询中找到的别名分配过于相同

编译查询时会产生混淆。 Mysql不知道你指的是哪个表。

修改:

尝试使用以下代码。我不确定哪个表有" boundID"字段

 $query ="SELECT b.boundName, s.stationName, t.departureTime
FROM Station s, Time t, Bound b
INNER JOIN Bound c
ON s.boundID=b.boundID
WHERE s.stationName = '$startStation'AND'$endStation'";

答案 1 :(得分:0)

尝试将您的查询更改为以下内容:

SELECT b.boundName as bond_name, s.stationName as station_name, t.departureTime as departure_time
FROM Station as s, Time as t, Bound as b
INNER JOIN Bound as b
ON s.boundID = b.boundID
WHERE s.stationName = '$startStation' AND s.stationName = '$endStation'

答案 2 :(得分:0)

您的数据库架构对我来说有点奇怪。从我的角度来看,你在表中缺少很多必要的数据列。

但是为了获得预期结果,您可以尝试此查询:

http://sqlfiddle.com/#!9/e5ef0/1

SELECT 
   b.boundName `Bound Name`,
   s.stationName  `Start Station`,
   e.stationName `End Station`,
   t.departureTime `Departure Time`
FROM station s
INNER JOIN station e
ON e.boundId = s.boundId
  AND e.stationName='$endStation'
INNER JOIN bound b
ON b.boundId=s.boundId
INNER JOIN `time` t
ON t.stationId=s.stationId
WHERE s.stationName = '$startStation'