2013-12-15 43 views
2

我有如下表:加入4個MySQL表

`course`: 
`id` (PK) 
`userid` (FK) 
`fromtimeid` (FK) --> `timetable_time` 
`tilltimeid` (FK) --> `timetable_time` 

`course_timetable`: 
`id` (PK) 
`courseid` (FK) --> `course` 
`timetable_dayid` (FK) --> `timetable_day` 

`timetable_time`: 
`id` (PK) 
`value` 

`timetable_day`: 
`id` (PK) 
`value` 

我要養活$userid,並希望得到包含用戶的時間表的陣列。

我正在努力工作的理念是:

  1. 獲取用戶ID。
  2. 獲取對應於useridfromtimeidtilltimeid
  3. 課程加入timetable_time表從#2獲得fromtimeidtilltimeid獲取的值。
  4. 通過(從#3提取)加入course_timetable.courseidcourse.id
  5. 加入timetable_day並得到天的值獲取天course_timetable表。

我試着做以下,但它拋出一個錯誤:

SELECT `course`.*, `course_timetable`.* 
FROM (`course`) 
JOIN `course_timetable` ON `course_timetable`.`courseid` = `course`.`id` 
JOIN `timetable_day` ON `timetable_day`.`id` = `course_timetable`.`timetable_dayid` 
JOIN `timetable_time` ON `timetable_time`.`id` = `course`.`fromtimeid` 
JOIN `timetable_time` ON `tiemtable_time`.`id` = `course`.`tilltimeid` 
WHERE `userid` = $id 

顯示的錯誤是:

Error Number: 1066 

Not unique table/alias: 'timetable_time' 

SELECT `course`.*, `course_timetable`.* FROM (`course`) JOIN `course_timetable` ON `course_timetable`.`courseid` = `course`.`id` JOIN `timetable_day` ON `timetable_day`.`id` = `course_timetable`.`timetable_dayid` JOIN `timetable_time` ON `timetable_time`.`id` = `course`.`fromtimeid` JOIN `timetable_time` ON `timetable_time`.`id` = `course`.`tilltimeid` WHERE `teacherid` = 0 

我要去哪裏錯了?

+0

你也有問題嗎? (EG。你有什麼問題?) –

+0

@ nl-x:MySQL查詢不起作用。 :( – xan

+2

這是怎麼回事?你有錯誤嗎?如果是這樣,錯誤是什麼?你的輸出是什麼,你的期望輸出是什麼? –

回答

2

既然你用同一個表中多次加入,你需要給他們的別名歧義他們:

JOIN `timetable_time` t1 ON t1.`id` = `course`.`fromtimeid` 
JOIN `timetable_time` t2 ON t2.`id` = `course`.`tilltimeid` 
2

您正在加入timetable_time兩次。

首先我想知道這是否有必要。引用當特定的表,你需要使用別名

JOIN SomeTimable AS SomeTableAlias ON ...

另外:但如果這樣,你需要給他們的至少一個別名。所以在SELECT和ON子句中使用別名。

(順便說一句,你可以aliassing表時省略關鍵字AS

1

你的問題是,你要加入的表timetable_time兩次,並使用相同的名稱。將其更改爲類似:

SELECT `course`.*, `course_timetable`.* 
FROM (`course`) 
JOIN `course_timetable` ON `course_timetable`.`courseid` = `course`.`id` 
JOIN `timetable_day` ON `timetable_day`.`id` = `course_timetable`.`timetable_dayid` 
JOIN `timetable_time` t1 ON t1.`id` = `course`.`fromtimeid` 
JOIN `timetable_time` t2 ON t2.`id` = `course`.`tilltimeid` WHERE `userid` = $id 
1

分配別名您timetable_time表中加入像這樣:

SELECT `course`.*, `course_timetable`.* 
FROM (`course`) 
JOIN `course_timetable` ON `course_timetable`.`courseid` = `course`.`id` 
JOIN `timetable_day` ON `timetable_day`.`id` = `course_timetable`.`timetable_dayid` 
JOIN `timetable_time` AS `tt1` ON `tt1`.`id` = `course`.`fromtimeid` 
JOIN `timetable_time` AS `tt2` ON `tt2`.`id` = `course`.`tilltimeid` 
WHERE `userid` = $id