Найти дубликаты записей с помощью расширенного запроса в CodeIgniter Datamapper - PullRequest
3 голосов
/ 23 февраля 2012

Я пытаюсь получить все дубликаты строк из БД.Допустим, у меня есть таблица entries с первичным ключом id ant VARCHAR столбец с именем name.У меня уже есть рабочий запрос SQL:

SELECT id, entries.name FROM entries 
INNER JOIN 
    (SELECT name FROM entries 
     GROUP BY name 
     HAVING count(id) > 1) 
duplicate ON entries.name = duplicate.name

Я хотел бы создать аналогичный запрос с помощью библиотеки CodeIgniter Datamapper lib для моего личного интереса, а также для согласованности с остальным кодом.Мы создали часть подзапроса, и она работает, как и ожидалось:

$e = new Entry();
$e->group_by('name')->having('COUNT(id) > 1')->get();

Но я не могу понять, как я могу интегрировать подзапрос в родительский запрос (часть INNER JOIN ... ON ...).

1 Ответ

2 голосов
/ 27 февраля 2012

Во-первых, вам не нужно принимать внутреннее соединение.

ВЫБЕРИТЕ id, records.name ИЗ записей GROUP BY name HAVING count (id)> 1

Это даст вам дубликаты записей.Таким образом, вам не нужно создавать сопоставление данных для объединенного запроса.

Вы получите результат только по этому.

$ e = new Entry ();

$ e-> group_by ('name') -> Имеющий ('COUNT (id)> 1') -> get ();

Обновление:

SELECTid, records.name ИЗ записей, где идентификатор НЕ ВХОДИТ (ВЫБЕРИТЕ идентификатор ИЗ записей GROUP BY name HAVING count (id) = 1)

...