mysql - 在查询中添加条件到 `IN`

标签 mysql

查询:

SELECT * FROM #__content WHERE featured=1 and catid=$category_id or catid IN 
( SELECT id FROM #__categories WHERE parent_id=$category_id )

Featured=1 仅在 catid=$category_id 处有效。开始这个 catid IN 的地方 ( SELECT id FROM #__categories WHERE parent_id=$category_id ) 输出所有行并且 featured=1 在这个地方被忽略。如何在 catid IN 中添加 featured=1 条件?

现在基本上它看起来像这样:

$query = "SELECT * FROM #__content WHERE featured=1 and catid=$category_id";
$query2 = "SELECT * FROM #__content WHERE catid IN 
    ( SELECT id FROM #__categories WHERE parent_id=$category_id )";

最佳答案

您需要添加括号以强制执行您需要的评估顺序:

SELECT * FROM #__content WHERE catid=$category_id OR (featured=1 AND catid IN 
( SELECT id FROM #__categories WHERE parent_id=$category_id ))

由于 AND 的优先级高于 OR,当 (featured=1 and catid=$category_id) 时,不带括号的表达式为真为真,或者 catid 在子查询指定的 IN 列表中。

关于mysql - 在查询中添加条件到 `IN`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14397763/

相关文章:

mysql - 一个表可以有两个外键吗?

MySQL docker 中的 MySQL conf 文件

java - Spring 数据 JPA : how to enable cascading delete without a reference to the child in the parent?

php - 非顺序分页 PHP

php - 嵌套 PDO 查询失败?

php - PHP级别系统?

mysql 合并行重复的单元格

python - 从 Python 脚本调用时 Perl 未完全执行

mysql - 如何在mysql中正确使用float类型?

mysql - 我有一个博客表。希望算作明智的地位