如何在删除查询中设置限制?

时间:2017-11-03 13:46:04

标签: php mysql sql symfony doctrine-orm

我尝试用Doctrine\DBAL\Connection删除一些数据,我想删除重复数据,所以我必须删除n-1个数据(如果n个数据相同)。

public function deleteDuplicateData(array $data) : bool
{
    $qb = $this->connection->createQueryBuilder();
    $qb->delete('myTable')
        ->where('id= :id')
        ->setParameter('id', $data['id'])
        ->setMaxResults($data['n']-1)
    ;
    return $qb->execute();
}

但是->setMaxResults($data['n']-1)不起作用,当我运行我的代码时,所有数据都会被删除。我尝试了这个->setMaxResults($data['n']-1),但它不起作用,所以我认为方法->setMaxResults()不适用于删除方法。

3 个答案:

答案 0 :(得分:0)

使用以下功能设置限制

public function deleteDuplicateData(array $data) : bool
    {
        $limit = 10;
        $qb = $this->connection->createQueryBuilder();
        $qb->delete('myTable')
            ->where('id= :id')
            ->setParameter('client_id', $data['id'])
            ->setMaxResults($limit);

        return $qb->execute();
    }

答案 1 :(得分:0)

我不能发表评论,所以请为此^^

是否可以在数据库系统中计算具有重复数据的行+是否具有相同的ID?如果是,您可以将ammount - 1存储到变量$duplicatedRows并使用for循环,如:

for($i;$<=$duplicatedRow;$i++){
    //Your Code to delete something  
}

答案 2 :(得分:0)

setMaxResults 仅在某些情况下有效。如果不管理,它似乎会忽略它。

检查教义文档:https://www.doctrine-project.org/projects/doctrine1/en/latest/manual/dql-doctrine-query-language.html#driver-portability