SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 11.02.2010 10:14:08

iaryutkin
Участник
Зарегистрирован: 11.02.2010
Сообщений: 1

Привести базу данных в порядок

И так, есть база данных с двумя таблицами hubs (список хабов) и hub_users (юзеры на хабах). Таблицы имеют следующую структуру.

hubs
id, address, description

hub_users
id, hub_id, nick, ip_address

Есть пару задач:
1) В таблице hubs могут быть несколько адресов хаба записанных по разному (пример: dc.blablabla.ru; dc.blablabla.ru:411, 87.250.111.222), на деле это один хаб. Соответственно в таблице hub_users будут одни и те же записи или чуть различающаяся по одному хабу только с разными hub_id. Нужно записям в таблице hub_users с hub_id равному адресу хаба dc.blablabla.ru:411 и 87.250.111.222 изменить hub_id на id хаба с адресом dc.blablabla.ru, но сделать это так, чтобы дубликаты удалились, а уникальные добавились.
2) Удалить все записи в таблице hub_users с hub_id которого не существует в таблице hubs.

Помогите пожалуйста, заранее благодарю! smile

Неактивен

 

#2 11.02.2010 16:52:55

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Привести базу данных в порядок

1. Нужно договориться писать имя хаба единообразно и всегда следовать этому соглашению;
2. Нужно вручную найти (ну или как-то автоматизировать поиск) «единообразных» строк;
Результатом работы этого пункта является пара id_from, id_to — id строк в hubs, в которых
мы хотим избавиться от строк id_from в пользу id_to;
3. Обновить пользователей: UPDATE hub_users SET hub_id = [id_to] WHERE hub_id = [id_from];
4. Удалить пустой хаб: DELETE FROM hubs WHERE id = [id_from];
5. Повторить начиная с пункта 2, пока не закончатся дубликаты.

--

DELETE u FROM hub_users u LEFT JOIN hubs h ON h.id = u.hub_id WHERE h.id IS NULL;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson