Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как удалить дубликаты наборов связей / 18 сообщений из 18, страница 1 из 1
12.11.2014, 07:26:35
    #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
12.11.2014, 07:35:36
    #38802946
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить дубликаты наборов связей
И в наборах слов по 10-50.
...
Рейтинг: 0 / 0
12.11.2014, 08:46:51
    #38802974
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить дубликаты наборов связей
...
Рейтинг: 0 / 0
12.11.2014, 09:23:25
    #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
12.11.2014, 09:23:47
    #38803002
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить дубликаты наборов связей
Запущать до тех пор, пока удаляет хотя бы одну запись.
...
Рейтинг: 0 / 0
12.11.2014, 11:09:43
    #38803151
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить дубликаты наборов связей
AkinaЗапущать до тех пор, пока удаляет хотя бы одну запись.
интересный способ. :)

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


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

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

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

Что-то типа того… Это можно одним запросом реализовать?
...
Рейтинг: 0 / 0
12.11.2014, 18:49:56
    #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
12.11.2014, 19:09:35
    #38804026
Serzh007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить дубликаты наборов связей
Для меня это что-то новенькое… И как мне это через сессию изменить? В чём принцип механизма?
...
Рейтинг: 0 / 0
12.11.2014, 19:19:41
    #38804043
alex564657498765453
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить дубликаты наборов связей
AkinaДумаю, GROUP_CONCAT(FUNCTION(slovo) ORDER BY slovo) спасёт отца русской демократии. В качестве FUNCTION можно использовать MD5, PASSWORD или OLD_PASSWORD - в зависимости от потребного быстродействия. Коллизию же считаю достаточно малореальной...

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

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

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

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

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

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


Только куда это писать?
И вот про это что скажете-то:
1. создаём временную таблицу с номером набора и строкой из слов в нём в алфавитном порядке (эта строка уникальный ключ);
2. добавляем туда данные с пропуском (IGNORE для строк из слов, которые уникальные);
3. удаляем из оригинальной таблицы связей все связи с номерами наборов, которых нет во временной таблице;
4. удаляем временную таблицу.?
...
Рейтинг: 0 / 0
13.11.2014, 04:54:45
    #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
13.11.2014, 11:08:56
    #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
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как удалить дубликаты наборов связей / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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