Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 连接4个MySQL表_Php_Mysql_Sql_Join - Fatal编程技术网

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.