对于想了解Zend_Db使用多个ANDOR运算符的复杂WHERE子句的读者,本文将是一篇不可错过的文章,我们将详细介绍where多个值,并且为您提供关于AndroidORMLite.左加入.WHERE
对于想了解Zend_Db使用多个AND OR运算符的复杂WHERE子句的读者,本文将是一篇不可错过的文章,我们将详细介绍where多个值,并且为您提供关于Android ORMLite.左加入. WHERE子句、android – 使用带有OR运算符的多个标记使用全文搜索(FTS)在多列中搜索、Firestore:多个条件where子句、mysql – 如何在带有可选include的where子句中使用运算符?的有价值信息。
本文目录一览:- Zend_Db使用多个AND OR运算符的复杂WHERE子句(where多个值)
- Android ORMLite.左加入. WHERE子句
- android – 使用带有OR运算符的多个标记使用全文搜索(FTS)在多列中搜索
- Firestore:多个条件where子句
- mysql – 如何在带有可选include的where子句中使用运算符?
Zend_Db使用多个AND OR运算符的复杂WHERE子句(where多个值)
我想在Zend_Db中生成这个复杂的WHERE子句:
SELECT * FROM ''products'' WHERE status = ''active'' AND ( attribute = ''one'' OR attribute = ''two'' OR [...] );
我已经试过了:
$select->from(''product'');$select->where(''status = ?'', $status);$select->where(''attribute = ?'', $a1);$select->orWhere(''attribute = ?'', $a2);
并且产生了:
SELECT `product`.* FROM `product` WHERE (status = ''active'') AND (attribute = ''one'') OR (attribute = ''two'');
我确实找到了一种完成这项工作的方法,但是我觉得通过使用PHP先组合“ OR”子句,然后再使用Zend_Db
where()子句将它们组合起来,这是一种“欺骗”。PHP代码:
$WHERE = array();foreach($attributes as $a): #WHERE[] = "attribute = ''" . $a . "''";endforeach;$WHERE = implode('' OR '', $WHERE);$select->from(''product'');$select->where(''status = ?'', $status);$select->where($WHERE);
产生了我想要的东西。但是我很好奇,是否有一种“官方”方式可以通过使用Zend_Db工具来获取复杂的WHERE语句(实际上并不太复杂,只需添加一些括号),而不是先在PHP中进行组合。
干杯!
答案1
小编典典这将是为您提供指定括号的“官方”方式(请参见Zend_Db_Select
文档中的示例20
):
$a1 = ''one'';$a2 = ''two'';$select->from(''product'');$select->where(''status = ?'', $status);$select->where("attribute = $a1 OR attribute = $a2");
因此,鉴于您不知道自己提前拥有多少个属性,因此您所做的事情似乎很合理。
Android ORMLite.左加入. WHERE子句
QueryBuilder<Answer,Integer> queryBuilder = helper.getAnswerDao().queryBuilder(); QueryBuilder<Question,Integer> questionQueryBuilder = helper.getQuestionDao().queryBuilder(); questionQueryBuilder.where().eq(Question.TYPE_COLUMN_NAME,"table"); queryBuilder.leftJoin(questionQueryBuilder); queryBuilder.where().eq(Answer.PICKED_COLUMN_NAME,true); pickedAnswers = queryBuilder.query();
生成的sql语句:
SELECT `Answers`.* FROM `Answers` LEFT JOIN `Questions` ON `Answers`.`questionId` = `Questions`.`id` WHERE `Answers`.`picked` = 1 AND (`Questions`.`type` = ''table'' )
由于“AND”逻辑运算,此查询返回空结果集.这是Ormlite的默认行为.是否有可能改变“OR”操作与子句结合的地方?
我试过:queryBuilder.where().或()之前的queryBuilder.where().eq(Answer.PICKED_COLUMN_NAME,true)和queryBuilder.where().或者(2)之后的所有where()方法.
解决方法
android – 使用带有OR运算符的多个标记使用全文搜索(FTS)在多列中搜索
当我尝试使用单列查询时,其工作正常,如下所示
select * from productsearch where productsearch match ('prod_name:panasonic*tw*')
并且,
select * from productsearch where productsearch match ('prod_short_desc:samsung*s5*')
因此,在两个查询之上给出了我预期的结果,但是当我尝试使用OR运算符组合两个查询时它没有给我任何结果
select * from productsearch where productsearch match ('prod_name:panasonic*tw* OR prod_short_desc:samsung*s5*')
所以,我想知道在使用OR运算符搜索多个列时我是否在做错了什么
UPDATE
以下查询工作正常,但不符合我的要求,
select * from productsearch where productsearch match ('prod_name:panasonic* OR prod_short_desc:samsung*')
您可以看到,如果我删除多个令牌,那么它也可以使用OR运算符正常工作.
解决方法
像prod_short_desc:samsung * s5 *这样的查询由两个表达式组成,prod_short_desc:samsung *和s5 *,其行为与编写prod_short_desc:samsung * s5 *完全相同.
如果已经为增强的查询语法编译了sqlite,则可以使用如下查询:
prod_short_desc:samsung* prod_short_desc:s5* OR prod_name:panasonic* prod_name:tw*
如果已为标准查询语法编译sqlite,则不能对此使用单个查询,因为OR运算符的优先级太高而无法使用括号修改.
Firestore:多个条件where子句
例如,我对我的书籍清单有动态过滤器,可以在其中设置特定的颜色,作者和类别。该过滤器可以一次设置多种颜色,也可以设置多种类别。
Book > Red,Blue > Adventure,Detective.
如何有条件地添加“ where”?
firebase
.firestore()
.collection("book")
.where("category","==",)
.where("color",)
.where("author",)
.orderBy("date")
.get()
.then(querySnapshot => {...
mysql – 如何在带有可选include的where子句中使用运算符?
我有以下型号:
AuthorModel.hasMany(BookModel);
BookModel.belongsTo(AuthorModel);
有些作者没有书.
我想选择一个作者,他的一本书的名字或头衔与搜索字符串相匹配.
我可以通过以下声明来实现这一点,但仅限于在BookModel中拥有书籍的作者
Author.findOne({
include: [{
model: Book,where: {
[Op.or]: [
{'$author.name$': 'search string'},{ title: 'search string'}
]
},}]
})
这给了我或多或少的以下mySQL查询:
SELECT
`author`.`name`,`book`.`title`
FROM `author` INNER JOIN `book`
ON `author`.`id` = `book`.`authorId`
AND ( `author`.`name` = 'search string' OR `book`.`title` = 'search string');
这里的问题是,如果作者没有书籍,那么结果是空的.即使有作者符合搜索条件.
我试图将include设置为required:false,它给出了一个左外连接.在这种情况下,我得到一些不匹配的结果.省略了where子句.
我如何更改我的sequelize查询,或者什么是正确的mySQL查询?
SELECT
`author`.`name`,`book`.`title`
FROM `author` LEFT JOIN `book`
ON `author`.`id` = `book`.`authorId`
WHERE ( `author`.`name` = 'search string' OR `book`.`title` = 'search string')
注意这里的过滤条件是如何在WHERE而不是JOIN … ON子句的一部分
基于Top level where with eagerly loaded models的示例,你的squizzle查询可能应该是这样的
Author.findOne({
where: {
[Op.or]: [
{'$author.name$': 'search string'},{ '$Book.title$': 'search string'}
]
},include: [{
model: Book,required: false
}]})
我们今天的关于Zend_Db使用多个AND OR运算符的复杂WHERE子句和where多个值的分享已经告一段落,感谢您的关注,如果您想了解更多关于Android ORMLite.左加入. WHERE子句、android – 使用带有OR运算符的多个标记使用全文搜索(FTS)在多列中搜索、Firestore:多个条件where子句、mysql – 如何在带有可选include的where子句中使用运算符?的相关信息,请在本站查询。
本文标签: