Mysql sql查询不使用concat
我正在开发一个搜索系统,在这个系统中,每个人都会按国家、名字和姓氏进行搜索。对于名字和姓氏,我使用了Mysql sql查询不使用concat,mysql,Mysql,我正在开发一个搜索系统,在这个系统中,每个人都会按国家、名字和姓氏进行搜索。对于名字和姓氏,我使用了concat,但将其与“进一步”和“条件”一起使用似乎不起作用。我的问题是 select * from users_profile where CONCAT(fname,' ',lname) like '%v %' or Email like '%v %' AND country='india' 在上面的示例中,如果ise使用不带“and”的查询,它将正常工作。但是我需要指定更多的条件,如果我只
concat
,但将其与“进一步”和“条件”一起使用似乎不起作用。我的问题是
select * from users_profile where CONCAT(fname,' ',lname) like '%v %'
or Email like '%v %' AND country='india'
在上面的示例中,如果ise使用不带“and”的查询,它将正常工作。但是我需要指定更多的条件,如果我只使用和不使用concat
,这也可以
select * from users_profile where CONCAT(fname,' ',lname) like '%v %'
or Email like '%v %'
如何使它同时适用于
concat
以及我想应用的和条件。您不应该使用concat
,更不用说WHERE
列周围的任何函数了。此外,您应该指定一个列列表,而不是SELECT*
。还要检查您的标准顺序
您可以尝试以下方法:
SELECT fullname, Email, country
FROM
(SELECT CONCAT(fname, ' ', lname) AS fullname, Email, country FROM users_profile) a
WHERE (a.fullname LIKE '%v %' OR Email LIKE '%v ') AND country = 'india'
并且具有比或更高的优先级,因此您需要更具逻辑性地对语句进行分组
比如:
select * from users_profile where (CONCAT(fname,' ',lname) like '%v %'
or Email like '%v %') AND country='india'
应该可以工作。函数在WHERE
子句中是可以使用的,只要您知道影响(不使用索引)或者它们的计算结果是常数(愚蠢的示例:DATE(NOW())
)。@AlainCollins对我来说,不使用索引似乎是查询优化中的一个明显的禁忌。在搜索之前修剪输入?@ParamVeer正如Alain所建议的,修剪将删除所有空白。您可能还想使用其他通配符,如\uuu
与“%v_%”
@param一样,修剪函数只影响字符串的开头或结尾(或两者),而不影响字符串的中间部分。您的想法进一步帮助我使其更加灵活。谢谢:)