我正在创建一个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的另一面。还是我误会了你的答案?谢谢!