Php 连接4个MySQL表
我有以下表格:Php 连接4个MySQL表,php,mysql,sql,join,Php,Mysql,Sql,Join,我有以下表格: `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_tim
`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并获取包含该用户时间表的数组
我努力工作的想法是:
获取用户ID。
获取与该用户ID、fromtimeid和tilltimeid对应的课程
加入时间表\u时间表以获取从2获取的fromtimeid和tilltimeid的值。
通过将course\u timeline.courseid与从3获取的course.id连接起来,从course\u时间表表中获取天数
加入“天”并获取天的值。
我已尝试执行以下操作,但它抛出了一个错误:
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
我哪里出错了?你两次加入时间表
首先,我想知道这是否必要。但如果是这样,则至少需要为其中一个提供别名:
将SomeTimeable作为SomeTableAlias加入到
此外,在引用该特定表时,还需要使用别名。因此,在SELECT和ON子句中使用别名
顺便说一句,在使用表别名时,您可以省略关键字。您的问题是,您两次加入表时间表并使用相同的名称。将其更改为:
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
由于要多次加入同一个表,因此需要为它们提供别名以消除歧义:
JOIN `timetable_time` t1 ON t1.`id` = `course`.`fromtimeid`
JOIN `timetable_time` t2 ON t2.`id` = `course`.`tilltimeid`
在联接中为时间表分配别名,如下所示:
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
你也有问题问我们吗?你有什么问题?@nl-x:MySQL查询不起作用:它怎么不起作用?你有错误吗?如果是,错误是什么?您的输出是什么?您的预期输出是什么?请至少提供一个对时间表时间的引用别名,例如,将时间表时间加入t1等。一个好的经验法则是,如果您发现自己说它不起作用,请从问题中删除它,并用您预期的内容和您实际收到的内容替换它。对于每一个仅有一个的问题+1.