首页 > 解决方案 > % (joker) 在我的带有 IN 运算符的 sql 查询中不起作用

问题描述

我正在读出一个数据库表,并在列中排除一些具有给定值的行。

但我无法查询以获取适合我的号码。我怀疑它仍然计算 kampanje _xxxxx行。我%用来排除。

$sql = 
    "SELECT * 
     FROM salg 
     WHERE 
         fnr='$fnr' 
         AND kategori NOT IN ('tilbehor', 'servicekontrakt', '%kampanje%') 
         AND dato BETWEEN '$fdato' AND '$tdato'"
;

 $kjor = mysqli_query($connect, $sql);
 $faste .=  mysqli_num_rows($kjor). ", ";

标签: phpmysqlsql

解决方案


IN比较运算符采用值列表,它不识别通配符,例如%. 所以你假设它仍然计算 kampanje_xxxxx 行是正确的,因为 MySQL 实际上是在搜索一个字'%kampanje%'面值。

您需要创建一个单独的LIKE条件来检查包含通配符的值的列。我相信您的查询可以表达如下:

SELECT * 
FROM salg 
WHERE 
    fnr='$fnr'
    AND kategori NOT IN ('tilbehor', 'servicekontrakt')
    AND kategori NOT LIKE '%kampanje%'
    AND dato BETWEEN '$fdato' AND '$tdato'

推荐阅读