首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SilverStripe SQLSelect where子句或where或where中

SilverStripe SQLSelect where子句或where或where中
EN

Stack Overflow用户
提问于 2019-12-10 23:50:50
回答 1查看 281关注 0票数 0

我正在做一个SilverStripe项目。在我的项目中,我需要编写手动/自定义查询。我正在尝试找出在我的查询中设置" where“或”where“”where in“。

这是我当前的代码

代码语言:javascript
复制
    $sqlQuery = new SQLSelect();
    $sqlQuery->setSelect('Player.*');
    $sqlQuery->setFrom('Player');
    $sqlQuery->addWhere([ '"Player"."ID"' => 1 ]);
    $sqlQuery->addWhere([ '"Player"."ID"' => 2 ]);
    $sqlQuery->addWhere([ '"Player"."ID"' => 3 ]);

我要做的是选择播放id为1、2或3的记录,但它不起作用,因为它将与AND连接而不是OR连接。如何使用where in或where?

我想过使用setWhereAny。问题是我们不能在PHP中为数组设置相同的数组键,如下所示。

代码语言:javascript
复制
$sqlQuery->setWhereAny([ 'ID' => 1, 'ID' => 2 ])

这也不起作用。

代码语言:javascript
复制
$sql->setWhereAny([ 'ID' => 1 ])->setWhereAny([ 'ID' => 2 ]);
EN

回答 1

Stack Overflow用户

发布于 2019-12-13 17:25:14

你的“where”应该是这两个中的任何一个;

代码语言:javascript
复制
$aIDs = [1,2,3];
1. $sqlQuery->addWhere(['ID IN (?)'=>implode(',',$aIDs)]);
2. $sqlQuery->addWhere('ID = 1 OR ID = 2 OR ID = 3');

addWhere构建SQL查询时,“where”子句位于数组值中,每次使用->addWhere()时,这些值都会被合并。因此,数组键是Table列。

setWhereAny;在您的情况下,这不适用,因为您只有1列要筛选。setWhereAny的正确用法如下所示

代码语言:javascript
复制
$sqlQuery->addWhereAny(array(
     'ID' => 1,
     'OtherID' => 3
));

相应的查询将是

代码语言:javascript
复制
SELECT * FROM Player WHERE ((ID = ?) OR (OtherID = ?))

希望这能有所帮助

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59270996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档