Concat(名字,"",姓氏)像OR电子邮件一样导致重复输出

时间:2018-04-16 15:26:03

标签: php sql

我有一个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不包含任何电子邮件数据;它只包含在用户表中。

如何阻止这种情况发生?

1 个答案:

答案 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