Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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
Where子句不适用于MySQL Select查询中的所有列_Mysql_Sql_Where - Fatal编程技术网

Where子句不适用于MySQL Select查询中的所有列

Where子句不适用于MySQL Select查询中的所有列,mysql,sql,where,Mysql,Sql,Where,我有一个用于提取MySQL表条目的查询,这取决于用户所做的搜索输入,然后显示这些输入 $abfrage = "SELECT id, motivname, preis, masse, produktart, neu, angebot FROM $db.artikel INNER JOIN $db.formate ON $db.artikel.format=$db.formate.format WHERE (UPPER(motivname) LIKE UPPER('%{$keywordAct}%

我有一个用于提取MySQL表条目的查询,这取决于用户所做的搜索输入,然后显示这些输入

$abfrage = "SELECT id, motivname, preis, masse, produktart, neu, angebot FROM $db.artikel
 INNER JOIN $db.formate ON $db.artikel.format=$db.formate.format
 WHERE (UPPER(motivname) LIKE UPPER('%{$keywordAct}%')
 OR id LIKE '%{$keywordAct}%'
 OR UPPER(produktart) LIKE UPPER('%{$keywordAct}%'))
 AND $db.artikel.aktiv=1
 ORDER BY id";
除了省略表达式aktiv=1之外,查询工作得非常好。当aktiv设置为0时,也将显示结果。“aktiv”是表“artikel”中的一个int列(见下文)

但是,如果我切换最后一个子句,查询工作正常

AND $db.artikel.aktiv=1
到,例如

AND $db.artikel.neu=1
不显示neu=0的项目,这也是一个int列

因此,我认为MySQL中的表设置存在问题,但无法解决。在同一数据库的另一个表中还有一列“aktiv”,但是这个表不在这个查询中,我还指定了artikel表的aktiv列

表格设置如下所示:

CREATE TABLE `artikel` (
 `id` varchar(11) COLLATE utf8_bin NOT NULL,
 `motivnummer` int(4) NOT NULL,
 `motivname` varchar(255) COLLATE utf8_bin NOT NULL,
 `format` int(2) NOT NULL,
 `preis` decimal(10,2) NOT NULL,
 `anzahl_lager` int(3) NOT NULL,
 `anzahl_verkauft` int(4) NOT NULL,
 `anzahl_kostenlos` int(4) NOT NULL,
 `aktiv` int(1) NOT NULL,
 `neu` int(1) NOT NULL,
 `angebot` int(1) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
我很高兴得到一些关于如何使查询按所提供的方式工作的信息。先谢谢你


PS:出于安全原因,关键字已经提前转义。

您添加了
子句

因此,即使
artikel.aktiv
为0且其他条件为真,它也将返回
aktiv
0的行

解决方案:

和合适的花括号

$abfrage = "SELECT id, motivname, preis, masse, produktart, neu, angebot FROM $db.artikel
 INNER JOIN $db.formate ON $db.artikel.format=$db.formate.format
 WHERE ((UPPER(motivname) LIKE UPPER('%{$keywordAct}%')
 OR id LIKE '%{$keywordAct}%'
 OR UPPER(produktart) LIKE UPPER('%{$keywordAct}%')))
 AND ($db.artikel.aktiv=1)
 ORDER BY id";
您的所有条件都处于
状态


条件只有在您将其与
分开时才会起作用

我已经将OR子句与带大括号的AND子句分开了。同样,该查询适用于And子句fine中的其他列,其中它只过滤真值。我尝试了你的代码,它对and子句也不起作用。