您好我正在尝试创建一个搜索功能,但无法让它工作。
这是我到目前为止所做的:
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'附近使用正确的语法
如果我删除其中一个内部联接和分组,它可以工作,所以不确定它是什么我可以使用两个分组?
答案 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