我有一个SQL查询:
SELECT *
FROM user, user_company, company
WHERE user.user_id = user_company.user_id AND
user_company.company_id = '$company_id' AND
user_company.company_id = company.company_id AND
CONCAT(user.user_first_name, ' ', user.user_last_name) LIKE '%$l%' OR user.user_email LIKE '%$l%'
LIMIT 5
这似乎可以返回值,无论用户是否输入与名称或电子邮件类似的内容,但是如果用户输入电子邮件,则存在缺陷,记录将被复制。
user_company不包含任何电子邮件数据;它只包含在用户表中。
如何阻止这种情况发生?
答案 0 :(得分:1)
从不在FROM
子句中使用逗号。 始终使用正确,明确,标准的JOIN
语法。
你的问题是缺少括号。尝试:
SELECT *
FROM user u JOIN
user_company uc
ON (user_id) JOIN
company c
ON (company_id)
WHERE uc.company_id = '$company_id' AND
(CONCAT(u.user_first_name, ' ', u.user_last_name) LIKE '%$l%' OR
u.user_email LIKE '%$l%'
)
LIMIT 5