我正在读出数据库表,并排除列中具有给定值的某些行。
但是我无法获得查询以获取适合我的电话号码。我怀疑它仍然计数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). ", ";
答案 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);
}