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

问题描述 投票:1回答:1

我提出了一个查询,用于提取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-column(见下文)。

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

AND $db.artikel.aktiv=1

ng

AND $db.artikel.neu=1

不显示neu = 0的文章,也是一个int-column。

所以我认为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:出于安全原因,关键字已经提前转义。

mysql sql where
1个回答
1
投票

你添加了OR条款。

因此,即使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分开时,OR条件才有效。

© www.soinside.com 2019 - 2024. All rights reserved.