Where子句不适用于MySQL Select-Query中的所有列

时间:2019-04-03 06:50:08

标签: 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}%')
 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:出于安全原因,关键字已经预先转义。

1 个答案:

答案 0 :(得分:1)

您已添加OR子句。

因此,即使artikel.aktiv为0且其他条件为true,它也会返回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条件只有在与OR分开的情况下才有效。