powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как удалить дубликаты наборов связей
18 сообщений из 18, страница 1 из 1
Как удалить дубликаты наборов связей
    #38802944
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица связей, например:

id — nabor — slovo

01 — 001 — 3456
02 — 001 — 3457
03 — 001 — 3458
04 — 001 — 2356

05 — 002 — 4512
06 — 002 — 4532
07 — 002 — 8756

08 — 003 — 3456
09 — 003 — 3457
10 — 003 — 3458
11 — 003 — 2356

Как удалить дубликаты наборов с одинаковыми словами и их количеством, т. е. как оставить один из наборов 001 и 003? Наборов сотни тысяч, бд не зависнет?… или сервер?
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38802946
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И в наборах слов по 10-50.
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38802974
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38803001
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёта типа
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
DELETE l.*
FROM links l,
( SELECT nabor, txt
  FROM
  ( SELECT nabor, GROUP_CONCAT(slovo ORDER BY slovo) txt
    FROM links
    GROUP BY nabor
  ) q1
  GROUP BY txt
  HAVING COUNT(txt)>1
) q2
WHERE l.nabor = q2.nabor
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38803002
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запущать до тех пор, пока удаляет хотя бы одну запись.
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38803151
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЗапущать до тех пор, пока удаляет хотя бы одну запись.
интересный способ. :)

смущает правда что при наличии 10 дублей, это 9 раз надо будет щитать одно и тоже, а главное, что то что останеться определяеться случайным образом.


но рабочий и интересный :)
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38803331
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453то что останеться определяеться случайным образом
Это определяется условиями исходной задачи. Но никто не мешает, например, в подзапросе q2 вместо `nabor` получать, к примеру, MAX(`nabor`) AS `nabor` - тогда останется группа с минимальным значением этого поля.
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38803797
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

GROUP_CONCAT
Вот, блин, посмотрел про эту функцию и засада — у неё ограничение на количество символов в 1024, а у меня есть наборы по 4000 символов и более… Хостер не даёт настраивать mysql. Как быть?
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38803827
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, GROUP_CONCAT(FUNCTION(slovo) ORDER BY slovo) спасёт отца русской демократии. В качестве FUNCTION можно использовать MD5, PASSWORD или OLD_PASSWORD - в зависимости от потребного быстродействия. Коллизию же считаю достаточно малореальной...
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38803861
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А я вот ещё что придумал, узнав про функцию GROUP_CONCAT (не нужно будет пляски с саблями из запросов делать):

1. создаём временную таблицу с номером набора и строкой из слов в нём в алфавитном порядке (эта строка уникальный ключ);
2. добавляем туда данные с пропуском (IGNORE для строк из слов, которые уникальные);
3. удаляем из оригинальной таблицы связей все связи с номерами наборов, которых нет во временной таблице;
4. удаляем временную таблицу.

Что-то типа того… Это можно одним запросом реализовать?
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38804009
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejkХостер не даёт настраивать mysqlЧто, даже в сессии изменить не получается? http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_group_concat_max_len Variable Scope Global, Session
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38804026
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для меня это что-то новенькое… И как мне это через сессию изменить? В чём принцип механизма?
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38804043
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaДумаю, GROUP_CONCAT(FUNCTION(slovo) ORDER BY slovo) спасёт отца русской демократии. В качестве FUNCTION можно использовать MD5, PASSWORD или OLD_PASSWORD - в зависимости от потребного быстродействия. Коллизию же считаю достаточно малореальной...

вполене себе реальная...пока у меня первичный ключ был мд5 , а не гуид, то при тесте на 15000 вставок, всреднем по одной -вде колизии при тесте возникало...
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38804044
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrejk,

Код: sql
1.
set @@session.group_concat_max_len=...

вроде бы так сессионные переменные выставляются
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38804048
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirandrejk,

Код: sql
1.
set @@session.group_concat_max_len=...

вроде бы так сессионные переменные выставляются

set global @param = 10 - значение для сервера
set @param = 20 - значение для сесии
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38804097
Serzh007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot alex564657498765453]tanglirandrejk,
set @param = 20 - значение для сесии
В моём случае, похоже, будет так:
Код: php
1.
set @session.group_concat_max_len = 6144


Только куда это писать?
И вот про это что скажете-то:
1. создаём временную таблицу с номером набора и строкой из слов в нём в алфавитном порядке (эта строка уникальный ключ);
2. добавляем туда данные с пропуском (IGNORE для строк из слов, которые уникальные);
3. удаляем из оригинальной таблицы связей все связи с номерами наборов, которых нет во временной таблице;
4. удаляем временную таблицу.?
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38804218
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex564657498765453set global @param = 10 - значение для сервера
set @param = 20 - значение для сесиишта? http://dev.mysql.com/doc/refman/5.1/en/set-statement.html
Код: sql
1.
2.
3.
4.
5.
6.
SET variable_assignment [, variable_assignment] ...

variable_assignment:
      user_var_name = expr
    | [GLOBAL | SESSION] system_var_name = expr
    | [@@global. | @@session. | @@]system_var_name = expr

откуда взялась собака в системных переменных? а если имелись в виду пользовательские, так они глобальными не бывают.

andrejkТолько куда это писать?туда же, куда и остальные запросы...
...
Рейтинг: 0 / 0
Как удалить дубликаты наборов связей
    #38804514
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tangliralex564657498765453set global @param = 10 - значение для сервера
set @param = 20 - значение для сесиишта? http://dev.mysql.com/doc/refman/5.1/en/set-statement.html
Код: sql
1.
2.
3.
4.
5.
6.
SET variable_assignment [, variable_assignment] ...

variable_assignment:
      user_var_name = expr
    | [GLOBAL | SESSION] system_var_name = expr
    | [@@global. | @@session. | @@]system_var_name = expr

откуда взялась собака в системных переменных? а если имелись в виду пользовательские, так они глобальными не бывают.

andrejkТолько куда это писать?туда же, куда и остальные запросы...

а я сам не знаю откуда там собака... идею хотел высказать нащот с /без слова глобал присваивать, а на кой я туда собаку затулил...наверно по привычке пальцы при слепом наборе ...токо подумал про сет, пробел и собака дорисовывают пальцы сами :)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как удалить дубликаты наборов связей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]