@lenkagruzd

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

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

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

Благодарность за любую подсказку и пинок в сторону верного решения.
  • Вопрос задан
  • 298 просмотров
Пригласить эксперта
Ответы на вопрос 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();

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

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

Войти через центр авторизации
Похожие вопросы