Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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查询不在_Mysql_Sql - Fatal编程技术网

Mysql查询不在

Mysql查询不在,mysql,sql,Mysql,Sql,我对建议文件的搜索工作正常。但是,我想从此搜索中排除一个文件,但不知道如何将其添加到此查询: $query = mysqli_query($con, " SELECT *, MATCH(file_name_keyword) AGAINST('$file_name_keyword') FROM `uploaded` WHERE MATCH(file_name_keyword) AGAINST('$file_name_keyword') OR file_name_keyword REGEXP

我对建议文件的搜索工作正常。但是,我想从此搜索中排除一个文件,但不知道如何将其添加到此查询:

$query = mysqli_query($con, "
SELECT *, MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
FROM `uploaded` 
WHERE MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
OR file_name_keyword REGEXP '.*($file_name_keyword).*' LIMIT 8");
和id不在(57)


我几乎尝试了所有方法,但它仍然不排除id 57处的行。

只需将现有条件放在括号中,然后在
WHERE
子句末尾添加
not in

SELECT *,MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
FROM `uploaded` 
WHERE (MATCH(file_name_keyword) AGAINST('$file_name_keyword') OR file_name_keyword REGEXP '.*($file_name_keyword).*' )
AND id NOT IN (57)
LIMIT 8

只需将现有条件放在括号中,然后在
WHERE
子句末尾添加
notin

SELECT *,MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
FROM `uploaded` 
WHERE (MATCH(file_name_keyword) AGAINST('$file_name_keyword') OR file_name_keyword REGEXP '.*($file_name_keyword).*' )
AND id NOT IN (57)
LIMIT 8
您需要在OR条件周围使用括号,否则mysql将以错误的方式读取它

您需要在OR条件周围使用括号,否则mysql将以错误的方式读取它。

尝试以下操作:

$query = mysqli_query($con, 
            "SELECT *, MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
             FROM `uploaded` 
             WHERE 
               id NOT IN (57) 
               AND (
                 MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
                 OR 
                 file_name_keyword REGEXP '.*($file_name_keyword).*'
               ) 
             LIMIT 8");
试试这个:

$query = mysqli_query($con, 
            "SELECT *, MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
             FROM `uploaded` 
             WHERE 
               id NOT IN (57) 
               AND (
                 MATCH(file_name_keyword) AGAINST('$file_name_keyword') 
                 OR 
                 file_name_keyword REGEXP '.*($file_name_keyword).*'
               ) 
             LIMIT 8");

谢谢,格式和解释都很好。将选择最佳和更快的答案。最好指出,首先检查ID排除比检查57行的匹配更快。@PlamenNikolov这是基于什么?对于这个查询,WHERE子句的顺序应该绝对不会造成性能差异。@如果您是对的,那么在大多数情况下,优化器都应该为您这样做。只要把它作为一种好的做法提出来。@PlamenNikolov我认为
WHERE AND
将始终执行与
WHERE AND
相同的操作,因此在这种情况下,担心顺序不是一种好的做法。谢谢,格式和解释都很好。将选择最佳和更快的答案。最好指出,首先检查ID排除比检查57行的匹配更快。@PlamenNikolov这是基于什么?对于这个查询,WHERE子句的顺序应该绝对不会造成性能差异。@如果您是对的,那么在大多数情况下,优化器都应该为您这样做。只要把它作为一个好的实践提出来。@PlamenNikolov我认为
WHERE和
的性能总是与
WHERE和
相同,所以在这种情况下,担心顺序不是一个好的实践。