Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql查询不使用concat_Mysql - Fatal编程技术网

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一样,修剪函数只影响字符串的开头或结尾(或两者),而不影响字符串的中间部分。您的想法进一步帮助我使其更加灵活。谢谢:)