Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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 如何在单个sql查询中处理多对多关系?_Php_Mysql_Sql_Database_Mysql Error 1064 - Fatal编程技术网

Php 如何在单个sql查询中处理多对多关系?

Php 如何在单个sql查询中处理多对多关系?,php,mysql,sql,database,mysql-error-1064,Php,Mysql,Sql,Database,Mysql Error 1064,我整个上午都在运行SQL调用,没有得到想要返回的正确类型的数据。我做了一些搜索,找到了一些关于连接两个表的信息,但是没有从表中提取的信息,也没有从表中提取的信息。这听起来可能会让人困惑,所以我制作了一张我想要得到的信息的图表 我试过这样的方法 select * from Users left join UserLibs on UserLibs.userId = Users.UserId WHERE Users.username='testname' 但这并没有给我图书馆的名字 因此,我尝试

我整个上午都在运行SQL调用,没有得到想要返回的正确类型的数据。我做了一些搜索,找到了一些关于连接两个表的信息,但是没有从表中提取的信息,也没有从表中提取的信息。这听起来可能会让人困惑,所以我制作了一张我想要得到的信息的图表

我试过这样的方法

select * from Users 
left join UserLibs on UserLibs.userId = Users.UserId
WHERE Users.username='testname'
但这并没有给我图书馆的名字

因此,我尝试将该列与另一个表和列连接起来

select * from users
left join UserLibs on userLibs.userId = Users.UserId AND left join Libraries on  UserLibs.libraryId = Libraries.libraryName
where Users.username='test';
这也没有产生结果,只是错误。这方面的任何帮助都会很棒

更新 我只是想添加我的最终解决方案,以适应我的情况

SELECT Users.userId, Users.username, Users.editLibraries, Users.editAnnouncements, Users.editServices, 
   Users.editNormalHours, Users.editSpecialHours, Users.editUsers, Users.editSemesters, 
   Libraries.libraryName, LibraryDepartment.departmentName
    FROM Users
    LEFT JOIN UserLibs on Users.userId = UserLibs.userId
    LEFT JOIN Libraries on UserLibs.libraryId = Libraries.id
    LEFT JOIN UserDepts on Users.userId = UserDepts.userId
    LEFT JOIN LibraryDepartment on UserDepts.departmentId = LibraryDepartment.ldId
    WHERE Users.username='testname';

不使用和来执行多个联接。你只要继续加入表格就行了。你想加入多少就加入多少。例如:

select *
from users
left join userlibs
on users.userid=userlibs.userid
left join libraries
on userlibs.libraryid=libraries.libraryid
where username='test';

不使用和来执行多个联接。你只要继续加入表格就行了。你想加入多少就加入多少。例如:

select *
from users
left join userlibs
on users.userid=userlibs.userid
left join libraries
on userlibs.libraryid=libraries.libraryid
where username='test';

和left join
完全是非法的。但这正是你必须做的,就像在你的图表中一样。`select from
users
,join->userlibs,join->libraries
和left join
完全是非法的。但这正是你必须做的,就像在你的图表中一样。`从
用户中选择,加入->用户库,加入->库不是所有返回的行都有相同的用户信息吗?@nickb否。如果用户名“test”映射到libraryid 6,它是“Main”,而libraryid 10是“Remote”,你会得到两条记录,每个映射一个。对,在一行中,您将拥有用户名测试的所有数据,以及信息6,Main。然后,在下一行中,您将获得用户名测试的所有数据,以及信息10,Remote。@kainaw这工作非常好。我还不能接受这个答案,但这正是我想要做的。出于某种原因,我认为在每一次加入之间,我必须有一个和。唯一的问题是图书馆和部门ID现在在那里有2次。正确。表用户的数据不会更改,但表库和用户库的数据会更改。因此,行没有相同的信息,但会有具有相同信息的列。为了避免这种情况,您不能要求每个用户有多个行(因为用户有多个库)。返回的所有行中不是都有相同的用户信息吗?@nickb否。如果用户名“test”映射到libraryid 6(主要)和libraryid 10(远程),您将得到两条记录,每个映射一条。对,在一行中,您将获得用户名测试的所有数据,以及信息6,Main。然后,在下一行中,您将获得用户名测试的所有数据,以及信息10,Remote。@kainaw这工作非常好。我还不能接受这个答案,但这正是我想要做的。出于某种原因,我认为在每一次加入之间,我必须有一个和。唯一的问题是图书馆和部门ID现在在那里有2次。正确。表用户的数据不会更改,但表库和用户库的数据会更改。因此,行没有相同的信息,但会有具有相同信息的列。为了避免这种情况,您不能要求每个用户有多行(因为用户有多个库)。