@lenkagruzd

Как в YII2 выбрать только дубли из базы данных?

Доброго всем здравия.

Как средствами YII2 выбрать только дубли записей по двум полям?
distinct() выводит уникальные записи, а вот как вывести только дубли для дальнейшей работы с ними?

Благодарность за любую подсказку и пинок в сторону верного решения.
  • Вопрос задан
  • 315 просмотров
Пригласить эксперта
Ответы на вопрос 2
anton_reut
@anton_reut
Начинающий веб-разработчик
Первым проходом собираешь уники, вторым проходом смотришь осталось ли что то сверяя с базой уников, если что нашлось сверяешь с уником и складываешь куда-то, как промывка золота в реке )

1. Считаем общее кол-во записей
2. Проходим DISTINCT, считаем кол-во уников
3. Если пункт 2 меньше общего кол-ва, значит есть "осадок" - не уники, дубликаты
4. Делаем выборку всех записей в массив и сравниваем с массивом уников из пункта 2.
5. Если есть совпадение значений массивов складываем эти "пары" в третий массив.

Либо наоборот - функцией array_diff() вычленяем уники и вычитаем их из общего массива записей = дубликаты.
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Добрый вечер.
Средствами yii, думаю будет морочительно.
А вот sql Вам должен помочь.
Что-то подобное этому.
Yii::$app->db->createCommand('
    SELECT 
        `users`.`name`, COUNT(`users`.`name`),
        `users`.`patronymic`, COUNT(`users`.`patronymic`),
        `users`.`surname`, COUNT(`users`.`surname`),
        `users`.`id`, COUNT(`users`.`id`)
    FROM
        `users`, `users` AS `tmp`
    WHERE `users`.`id` > `tmp`.`id`    
    GROUP BY 
        `users`.`name`, 
        `users`.`patronymic`, `users`.`surname`, `users`.`id`
    HAVING 
           (COUNT(`users`.`name`) > 1) AND 
           (COUNT(`users`.`patronymic`) > 1) AND 
           (COUNT(`users`.`surname`) > 1)
')->execute();

Выбираются дубликаты записей. Запрос делал под свой проект, Вам надо изменить его под свои нужды.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы