我有一个查询,用于提取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:出于安全原因,关键字已经预先转义。
答案 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
分开的情况下才有效。