我试图使用一个简单的使用提交字段在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.
做一个子查询:
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)