多个MYSQL内部联接

时间:2011-09-26 18:23:25

标签: php mysql inner-join

您好我正在尝试创建一个搜索功能,但无法让它工作。

这是我到目前为止所做的:

SELECT DISTINCT users.ID, users.name

FROM users 
INNER JOIN usersSkills 
ON users.ID = usersSkills.userID 
INNER JOIN usersLanguages 

ON users.ID = usersLanguages.userID 
WHERE activated = "1" 
AND type = "GRADUATE" 

AND usersSkills.skillID IN(2) 
GROUP BY usersSkills.userID HAVING COUNT(*) = 1 

AND usersLanguages.languageID IN(2) 
GROUP BY usersLanguages.userID HAVING COUNT(*) = 1 

但我一直收到这个错误:

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在第14行的'GROUP BY usersLanguages.userID HAVING COUNT(*)= 1'附近使用正确的语法

如果我删除其中一个内部联接和分组,它可以工作,所以不确定它是什么我可以使用两个分组?

2 个答案:

答案 0 :(得分:6)

声明中有两个group by子句;那是无效的SQL。做你的第一组,然后是逗号,然后你的第二组。在使用OR和AND将它们连接成逻辑语句

之后,你的Having子句应该出现
GROUP BY usersSkills.userID, usersLanguages.userID
HAVING COUNT(*) = 1 
AND usersLanguages.languageID IN(2) 

回答你的语法错误问题..(不要试着在这里说话),但查询的结构显示你真的不知道你想以查询的形式做什么...我强烈建议你拿一本SQL书或者通过一个sql教程,这样你才能理解你想写的语句实际上是做什么的。

答案 1 :(得分:3)

Tr this:

SELECT DISTINCT users.ID, users.name, COUNT(*)
FROM users 
INNER JOIN usersSkills ON users.ID = usersSkills.userID 
INNER JOIN usersLanguages ON users.ID = usersLanguages.userID 
WHERE activated = "1" 
      AND type = "GRADUATE" AND usersSkills.skillID = 2 
      AND usersLanguages.languageID = 2 
GROUP BY usersSkills.userID,
         usersLanguages.userID 
HAVING COUNT(*) = 1 

删除了多个错误的GROUP BY并合并了查询 还将IN(x)更改为= x