2016-05-12 100 views
0

我有三個表:約束,車站和時間內部聯接問題PHP

界有2列:boundID和boundName

站有3列:的stationID工作站名稱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工作站名稱boundID

5 | CitySquare | 2 ________________________________________________________________________________ boundID boundName

2 |南行線________________________________________________________________________________

TIMEID departureTime tramID的stationID

1 | 07:18:00 | 1 | 5

預期的結果是用戶能夠插入startStartion和endStation,並獲得出發時間,如果boundID相同。

這是我想輸出的結果

綁定名稱|起始站|終端站|出發時間

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

+0

請提供預期的結果集和數據樣本將是非常有益 – Alex

+0

這裏是顯示數據庫中的截圖,變量和我正在使用的查詢。 –

+0

沒有。在你的截圖中幾乎沒有什麼有用的。爲OP中的每個表提供幾行,並且這些記錄應該彼此相關。例如,從id爲2的「綁定」表中獲取一條記錄,並從其他表中獲取所有相關數據。 – Alex

回答

0

INNER JOIN Bound c 

更改的碼

INNER JOIN Bound b 

下面部分和更改列的別名太。在您的查詢中發現的同名別名分配太多

編譯查詢時會造成混淆。 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'"; 
+0

像這樣?現在我在'on條款'消息中得到'未知列S.boundID'\t \t //顯示從一個站到另一個站的電車時間\t \t \t \t ELSE if($ startStation!=''&& $ endStation!=''&& $ DepartureTime ==''&& $ DepartureTime2 =='') \t \t $ query =「SELECT b.boundName,s.stationName,t 。出發時間 \t \t從車站S,時間t束縛b \t \t INNER JOIN束縛Ç \t \t ON S.boundID = B.boundID \t \t WHERE s.stationName = '$ startStation'AND' $端站'「; @Arun –

+0

別名是區分大小寫的。如果你使用「S」,那麼你必須使用相同的 – Arun

+0

現在我再次收到錯誤「不是唯一表/別名:'b'」:/ –

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' 
+0

我得到'不是唯一的表/別名:'b'消息? –

0

你的DB模式是有點怪我。從我的角度來看,您在表格中缺少很多必要的數據列。

但只是爲了讓你期望的結果,你可以嘗試此查詢:

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'