在MySQL中使用HAVING和WHERE子句之间的"OR"?

Jim*_*mmy 6 mysql sql search

我试图使用一个简单的使用提交字段在MySQL中获取记录.更确切地说,用户输入名称(名字或姓氏或全名),服务器应返回匹配的行.

到目前为止我所做的是:

SELECT * FROM people 
WHERE 
   firstname LIKE '%user_submitted_data%' OR 
   lastname LIKE '%user_submitted_data%'
Run Code Online (Sandbox Code Playgroud)

这在目前很有效,但是当用户提交全名时,(显然)不起作用.有没有办法在整个'WHERE类型条件'和'HAVING类型条件'之间添加OR?这样我可以做类似的事情:

SELECT [some fields], CONCAT(firstname, ' ', 'lastname') as fullname 
FROM people 
WHERE 
   firstname LIKE '%user_submitted_data%' OR 
   lastname LIKE '%user_submitted_data%' OR 
   HAVING fullname LIKE '%user_submitted_data%'
Run Code Online (Sandbox Code Playgroud)

我知道我可以拆分原始字符串,但这有一些负面影响,因为你必须处理包含空格的名称,例如'De Gaule'和类似的东西.

Ari*_*zis 10

只需将所有条件纳入该HAVING条款.

SELECT [some fields], CONCAT(firstname, ' ', 'lastname') as fullname 
FROM people 
HAVING firstname LIKE '%user_submitted_data%'
OR      lastname LIKE '%user_submitted_data%'
OR      fullname LIKE '%user_submitted_data%
Run Code Online (Sandbox Code Playgroud)

WHERE子句可以提前丢弃行,但由于评估计算列上的条件之后才能丢弃它们,并且必须等到HAVING它,它才会购买任何东西WHERE.


Zed*_*Zed 5

做一个子查询:

SELECT [some fields]
FROM
  SELECT firstname, lastname, CONCAT(firstname, ' ', lastname) as fullname
  FROM people) AS tmp
WHERE firstname LIKE '%user_submitted_data%'
OR lastname LIKE '%user_submitted_data%'
OR fullname LIKE '%user_submitted_data%'
Run Code Online (Sandbox Code Playgroud)