%(小丑)在我的带有IN运算符的SQL查询中不起作用

时间:2019-02-10 20:47:41

标签: php mysql 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). ", ";

2 个答案:

答案 0 :(得分:2)

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'

答案 1 :(得分:0)

您应使用OR not like并避免在IN值集中使用通配符

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

无论如何,您都应该避免在sql中使用php var。.您有sqliject的风险。.尝试看看ypour db驱动程序中准备好的语句和绑定参数

对于看到错误,最终尝试使用

显示确切的错误消息
if (!$kjor) {
 printf("Errormessage: %s\n", $connect->error);
}