MySQL Select OR语句有问题吗?使我抓狂

时间:2018-12-12 00:07:09

标签: php mysql wordpress

我正在创建一个WP插件,该插件会将设置存储在自定义表中,并根据页面ID或类别ID(如果在时间范围内)检索设置。日期选择位工作正常;删除语句的日期选择部分后,问题仍然存在。

问题在于,每个 select ... or 语句都可以独立运行 ,但是当我使用方括号和OR选择器连接它们时,它仅提取类别。这与我使用的代码相同,但为了清楚起见,删除了日期内容(有效):

public class LocalDateTimeToStringTypeConverter implements DynamoDBTypeConverter<String, LocalDateTime> {

    @Override
    public String convert(LocalDateTime localDateTime) {
        return localDateTime.toString();
    }

    @Override
    public LocalDateTime unconvert(String s) {
        return LocalDateTime.parse(s);
    }
}

当我使用此代码时,即使有一个符合条件的条目(它应该首先抓住),它也只会拉类别条目。如果我删除类别选择器,它将拉出帖子条目就好了。来自不同行的start / stop_ID之间没有干扰;已经检查过了。

基本表结构是这样的...请注意,某些字段为空,因为用户将能够指定范围或单个页面或类别ID。

$sql = "SELECT * FROM {$tablename}
WHERE (
      ( start_id = {$postid} OR ( start_id < {$postid} AND stop_id >= {$postid} ) AND scope = 'post' )
   OR ( start_id = {$categoryid} OR ( start_id < {$categoryid} AND stop_id >= {$categoryid} ) AND scope = 'category' )
 )
AND ( ...date selector... )";

非常感谢您对这个问题有任何见识!

编辑以解决一些评论:(1)@JESUS:插入非常具体,不允许基于ID重复,因此它总是拉一行; (2)@IVANIVAN:您的意思是运算符优先级? OR在AND之前被分解,因此我将AND分组,然后将其用作OR的另一面。还是我误会了你的答案?谢谢!

0 个答案:

没有答案