为了账号安全,请及时绑定邮箱和手机立即绑定

具有与传入参数的值一样多的结果的 SQL 准则查询

具有与传入参数的值一样多的结果的 SQL 准则查询

PHP
倚天杖 2021-09-05 20:42:28
假设我给一个函数一个数组:$arrValues = ['19', '4', '4', '18', '19']到一个函数:$objRequeteDoctrine = $this->getEntityManager()->createQueryBuilder()    ->select('o')    ->from('xxxxxx', 'o')    ->where('o.id IN (:values)')    ->andwhere('o.actif = 1')    ->setParameter(':values', $arrValues );return $objRequeteDoctrine->getQuery()->getResult();在这里,它将检索 3 个对象(删除重复项)。但是如果我想检索 5 个重复的对象怎么办?那可能吗 ?谢谢。
查看完整描述

1 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

使用 Doctrine 实现这一点可能不是您问题的答案,但可以解决您的问题。之后生成完整数组怎么样?


$arrValues = ['19', '4', '4', '18', '19'];


$objRequeteDoctrine = $this->getEntityManager()->createQueryBuilder()

    ->select('o')

    ->from('xxxxxx', 'o')

    ->where('o.id IN (:values)')

    ->andwhere('o.actif = 1')

    ->setParameter(':values', $arrValues );


$result = $objRequeteDoctrine->getQuery()->getResult();


// Get the object ids in a separate array to find their position in the result


$idsOnly = [];

foreach($result as $entity) {

    $idsOnly[] = $entity->getId();

}


// Find the key of the object by id in the first result


$fullResult = [];

foreach ($arrValues as $id) {

    $keyFound = array_search($id, $idsOnly);

    if ($keyFound !== false) {

        $fullResult[] = $result[$keyFound];

    }

}


return $fullResult;


查看完整回答
反对 回复 2021-09-05
  • 1 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信