1

Тема: Пошук дублів у БД і їх групування

Доброго дня.
Є база даних, яка складається з однієї таблиці з трьох стовпців(id, code, data) і 60000 записів.
Значення дата може багаторазово повторюватися.
Хочеться отримати записи згруповані по code, які є дублікатами по стовпцю data.

Приблизно так:
-Група 1 = [code1, code48, code155...]   а значення  data для цієї групи однакове.
-Група 2 = [code4, code44, code250...]

Скільки таких груп невідомо, може тисяча.

Тому питання, як краще організувати структуру цих груп і списків?

Перша ідея була перебрати кожен запис в БД і сформувати список дублів, можливо в окремий файл...

2

Re: Пошук дублів у БД і їх групування

Проіндексуйте по data і зробіть ORDER BY.

Подякували: Torbins1

3

Re: Пошук дублів у БД і їх групування

По-перше, яка база даних?

4

Re: Пошук дублів у БД і їх групування

Vo_Vik написав:

По-перше, яка база даних?

MariaDB з XAMPP.

5

Re: Пошук дублів у БД і їх групування

koala написав:

Проіндексуйте по data і зробіть ORDER BY.

Якщо можливо, поясніть більш детально бо я в БД дуже слабо. Як заповнити її даними уже знаю, а як відібрати інформацію в потрібному форматі - ще ні.

6

Re: Пошук дублів у БД і їх групування

Select group_concat(code), `data` from table_name
Group by `data`

Подякували: pike_ua1

7

Re: Пошук дублів у БД і їх групування

Vo_Vik написав:

Select group_concat(code), `data` from table_name
Group by `data`

Дуже дякую, я ще трохи змінив запит і все вийшло так як було потрібно.

Select group_concat(code), `data` ,
count(*) AS count from geo_tab 
Group by `data` 
HAVING count > 1;

8

Re: Пошук дублів у БД і їх групування

А чи є можливість порахувати (суму) отих count ?

9

Re: Пошук дублів у БД і їх групування

Ніби тотал в кінці?
Ваш селект
Union all
Select '' as data, '' as code, sum(`count`) from (ваш селект, тільки я би аліас для каунт поміняв, службове слово все ж таки))

Подякували: pike_ua1

10 Востаннє редагувалося pike_ua (01.10.2021 11:41:32)

Re: Пошук дублів у БД і їх групування

Vo_Vik написав:

Ніби тотал в кінці?
Ваш селект
Union all
Select '' as data, '' as code, sum(`count`) from (ваш селект, тільки я би аліас для каунт поміняв, службове слово все ж таки))

Чи то я не зрозумів правильно як реалізувати, але не вийшло. Зробив за допомогою php.
Натомість, знайшовся косяк у пошуку дублікатів.

Значення data це набір латинских букв і цифр(5-30 тис символів). Багато з них є float з 9 знаків після коми і, здається, тому mysql їх порівнює не завжди коректно.

Спробую всіх їх(.) замінити на якийсь інший символ.

11

Re: Пошук дублів у БД і їх групування

Нажаль, "фокус" з заміною крапок в числах не дав результату.
Чомусь MySQL не точно порівнює такі довгі рядки.
Я пробував навіть кодувати значення через base64_encode і потім шукати збіги, результат такий же, знаходить схожі, але не 100% співпадіння.  Таке враження ніби порівнює десь 50-70% значення, а все інше ігнорується.

12

Re: Пошук дублів у БД і їх групування

pike_ua написав:

Значення data це набір латинских букв і цифр(5-30 тис символів). Багато з них є float з 9 знаків після коми і, здається, тому mysql їх порівнює не завжди коректно.

Привіт!
Хотілося б побачити декілька реальних прикладів даних та схему БД, щоб спробувати локально подебажити.