2017-11-03 12 views
0

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()が削除メソッドのために動作しないと思うので、それは動作しません。このためSRYが

を^^だから私は、コメントを傾けるセットの制限の機能以下

+0

https://stackoverflow.com/questions/2630440/how-to-delete-duplicates-on-a:変数$duplicatedRowsに1等のforループを使用 - はい、あなたはammountを保存することができれば-mysql-table重複を除去するためのすべての方法については、このエントリーをチェックアウトすることができます。もちろん、あなたの最善の策は、最初に重複したデータを取得しないように修正することです。 –

+0

私の仕事ではないので項目を確認できません。重複したエントリーを削除するスクリプトを作成する必要があります...あなたは正しいのですが、それを確認するのは簡単でしょうが、私はできません:/ –

+0

おそらく、doctrineはこれをサポートしていません。それがオプションの場合、基になるデータベースが制限付きの削除をサポートしている場合、DQLなしでネイティブクエリを使用できます。 – Joe

答えて

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(); 
    } 
+0

それは動作しません:/ –

0

はあなたのDBシステム+ドゥ彼らに重複データを持つ行をカウントすることが可能です同じIDを持っていますか?

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

はい、しかし、クエリはすべての重複を削除します、もし私がhte LIMITを使用しなければならない( –

+0

これは多分:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/query-builder.html - >「5.2.6。制限句」の下にあります。あなたは " - > setFirstResult(10)"と " - > setMaxResults(20)"の両方を使用する必要があると書いています。 – Celebrombore

関連する問題