php - 这个带有 NOT LIKE 语句的 SQL 查询有什么问题?

标签 php mysql sql

SELECT * 
FROM combinazioni
WHERE (
    sesso = '3'
    OR sesso = 'f'
)
AND (
    menopausa = '3'
    OR menopausa = '1'
)
AND (
    ipert_a = '3'
    OR ipert_a = '1'
)
AND (
    obesita = '3'
    OR obesita = '1'
)
AND (
    LOWER( i_alimento ) NOT LIKE '%ricotta%'
    OR LOWER( ii_alimento ) NOT LIKE '%ricotta%'
    OR LOWER( iii_alimento ) NOT LIKE '%ricotta%'
    OR LOWER( iv_alimento ) NOT LIKE '%ricotta%'
    OR LOWER( v_alimento ) NOT LIKE '%ricotta%'
)
ORDER BY rilevanza_1 DESC 

我不明白这个问题。为什么这个查询不起作用? 我尝试在 PHPMyAdmin 中执行此代码,但它没有给我我想要的记录。该查询不会给出任何错误,但返回带有“ricotta”的记录。

我希望此查询向我显示在任何 i_alimento有“ricotta”的记录。 , ii_alimento , iii_alimento , iv_alimento , v_alimento字段。

最佳答案

我很确定您需要 and 而不是 or。但是,您应该使用 in 并简化整个 where 子句:

WHERE sesso IN ('3', 'F') AND
      menopausa IN ('1', '3') AND
      ipert_a IN ('1', '3') AND
      obesita IN ('1', '3') AND
      (LOWER(i_alimento) NOT LIKE '%ricotta%' AND
       LOWER(ii_alimento) NOT LIKE '%ricotta%' AND
       LOWER(iii_alimento) NOT LIKE '%ricotta%' AND
       LOWER(iv_alimento) NOT LIKE '%ricotta%' AND
       LOWER(v_alimento) NOT LIKE '%ricotta%'
      )

这会检查五个“alimento”中的任何一个都不会出现“ricotta”。如果您使用,那么它只会检查其中最多一个不包含'ricotta'

此外,如果您确定确实需要 OR,则应该在条件两边加上括号。

关于php - 这个带有 NOT LIKE 语句的 SQL 查询有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39435740/

相关文章:

php - INSERT 查询 PDO 单引号 PDO Error

javascript - PHP 文件重定向/离开主页

mysql - group_concat,将一列连接成一行,如果其他列相等

SQL Where 子句带有 If(或 Case)语句?

mysql - SQL查询结果

php 发送邮件(邮件正文取自数据库)

php - Jquery/PHP ajax登录系统

mysql - 如何将时间四舍五入到最接近的 15 分钟段

mysql select查询与order by条件问题

php - 基于 MySQL 查询中的 If Else 语句的自定义 CSS