[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Слияние одинаковых таблиц с разных сайтов
silius
Добрый день и спасибо всем, кто не прошёл мимо smile.gif

Есть 5-ь сайтов, они полностью схожи. У каждого из них своя база (также схожая с остальными). В базе имеется таблица "user".

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

А теперь, что нужно сделать:

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

был вариант слить таблицы в одну, но есть одно НО:
- контент сайтов связан по id пользователя, которые естественно перезапишутся в новой таблице, и сайт естественно рухнет
есть ещё один вариант:
- при авторизации сверять пару логин/пароль по базе одного сайта, если не найден, то переключаться на базу второго сайта и т.д.

Может у кого была подобная ситуация? Посоветуйте пожалуйста



Спустя 15 минут, 41 секунда (8.07.2010 - 11:45) waldicom написал(а):
А все базы лежат на доном хосте?

Спустя 1 минута, 18 секунд (8.07.2010 - 11:46) silius написал(а):
да, все базы и сайты на одном хосте, блин забыл уточнить, извеняюсь wink.gif

Спустя 10 минут, 30 секунд (8.07.2010 - 11:57) waldicom написал(а):
Такие вещи обычно делаются многомандантными, но в данном случае, когда база уже спроектирована и работает... Может сделать отдельную таблицу, которая будет синхронизироваться со всеми остальными? Внести в неё только email/nickname+password.

Спустя 5 минут, 14 секунд (8.07.2010 - 12:02) silius написал(а):
waldicom, согласен, но это с самого начала нужно было делать, к сожелению не я писал проекты, поэтому приходиться исходить из того, что есть, а за совет спасибо!

С удовольствием рассмотрю ещё варианты smile.gif

Спустя 29 минут, 26 секунд (8.07.2010 - 12:32) vagrand написал(а):
silius ты не совсем понял что предлогает waldicom. Он предлогает сделать отдельную БД с одной таблицей юзеров. В эту таблицу будут попадать данные о всех юзерах со всех твоих сайтов. При логине ты проверяеш наличие юзера в БД сайта и если его там нет то делаеш проверку в этой таблице.

Вот как-то так

Спустя 22 минуты, 48 секунд (8.07.2010 - 12:54) silius написал(а):
vagrand, впринципе так и понял, может просто выразился несовем корректно. smile.gif

В 'единой' таблице хочу сделать 4 поля:

id_new | login | password | id_old
____________________________
1 | name| 1234563 | site_id


id_old служит для определения сайта на котором юзер был зарегестрирован (для удаления его из старой базы)

Спустя 8 минут, 1 секунда (8.07.2010 - 13:02) waldicom написал(а):
Цитата (silius @ 8.07.2010 - 11:54)
id_old служит для определения сайта на котором юзер был зарегестрирован (для удаления его из старой базы)

Думаю, что удалять из старых не надо, пусть остануться полностью функциональными. Редундантность конечно, но места много, наверное, не займет.

Спустя 6 минут, 1 секунда (8.07.2010 - 13:08) silius написал(а):
Да что ж сегодня со мной такое, наверное +37 за окном даёт о себе знать wink.gif

waldicom,
id_old - может понадобиться для удаления самим пользователем, либо же для бана и т.д.

в остальном согласен smile.gif

Спустя 11 минут, 56 секунд (8.07.2010 - 13:20) sergeiss написал(а):
Цитата (silius @ 8.07.2010 - 12:29)
был вариант слить таблицы в одну, но есть одно НО:
- контент сайтов связан по id пользователя, которые естественно перезапишутся в новой таблице, и сайт естественно рухнет

Почему же "естественно"? Если ты правильно изменишь все связи, то ничего не рухнет.
Например, надо поменять id юзера с 236 на 10483274. Измени его во всех таблицах определенного сайта, где он присутствует... И всё будет нормально! Ничего не рухнет. С чего бы вдруг, если все взаимосвязи сохранены?
Проделай это во всех БД. Только обеспечь уникальность номера. И "будет тебе счастье" smile.gif

И автоматизировать это всё не сложно.

А потом можешь уже "слить" все таблицы юзеров вместе, т.к. у них будут уже уникальные номера.

Спустя 7 минут, 39 секунд (8.07.2010 - 13:28) silius написал(а):
sergeiss
проблема ещё в том, что на каждом из сайтов за 5-ь минут регистрируются приблизительно 4 юзера, и оставляют объявлений за те же 5-ь минут приблизительно 10, 15, как быть с ними?

Спустя 9 минут, 15 секунд (8.07.2010 - 13:37) sergeiss написал(а):
Ну и чего из того?

Как я понимаю, айди пользователя для каждого сайта - автоинкрементный. А это значит, что можно установить для каждой таблицы некий номер, начиная с которого будут назначаться новые айди. И для разных таблиц они будут разные!!!
Например, есть у тебя где-то 50000 юзеров. Для первой таблицы установим новое "стартовое" значение для айди 100000, для второй - 150000, для третьей - 200000... После чего можно спокойно переименовывать старые айди, давая им диапазон от 50 до 100 тысяч. При этом новые юзеры будут спокойно регистрироваться, а твой скрипт будет спокойно менять старые айди.
Затем надо слить вместе все таблицы и тут же установить новый нижний порог для нового айди. Например, 300 тысяч. И всё, задача решена.

Существенно то, что ты проделываешь это только один раз. И не надо потом ничего "хронически" синхронизировать.

Спустя 13 минут, 50 секунд (8.07.2010 - 13:51) silius написал(а):
sergeiss
а что? вполне интересно, ещё один интересный совет smile.gif Спасибо

Спустя 29 минут, 45 секунд (8.07.2010 - 14:21) linker написал(а):
А не проще глобальную референс базу сделать? Мало того, что это проще сделать, так еще и не придется жанглировать автоинкрементами, айдюками пользователей и прочее.

Спустя 14 минут, 40 секунд (8.07.2010 - 14:36) sergeiss написал(а):
linker - позволь узнать - а что же такое будет у тебя в этой "глобальной" базе, если там не будет ни автоинкриментов, ни айди пользователей???

Спустя 10 минут, 26 секунд (8.07.2010 - 14:46) linker написал(а):
Примерно так, за каждым сайтом закрепляется id

site_id, login, pass

Тут куча плюсов: юзверь может ходить по всем сайтам, юзверь может ходить только на указанных сайтах, юзверь может ходить, только там где зарегался и прочее и прочее. Про расширяемость вообще молчу: 5, 6, 7, 10, 100 сайтов, пофик.

Есть варианты с уникальностью логинов и необходимость хранить в референс id юзверя. Банальная ситуация-связка один ко многим и ведущий-ведомые.

Спустя 16 минут, 12 секунд (8.07.2010 - 15:02) waldicom написал(а):
Цитата (linker @ 8.07.2010 - 13:46)
Примерно так, за каждым сайтом закрепляется id
site_id, login, pass


Цитата (waldicom @ 8.07.2010 - 10:57)
Такие вещи обычно делаются многомандантными, но в данном случае, когда база уже спроектирована и работает...

Спустя 41 секунда (8.07.2010 - 15:03) silius написал(а):
ого, сбегал пообедал, а тут ещё написали smile.gif . Спасибо

linker, как я понял, ты предлагаешь сделать, как ранее написал я? Или я неправильно понял? wink.gif

Спустя 3 минуты, 46 секунд (8.07.2010 - 15:07) linker написал(а):
silius, практически да, только зачем что-то удалять и хранить старые id юзверей. Все делается, без напряга, с уже существующими данными.

Спустя 3 минуты, 7 секунд (8.07.2010 - 15:10) silius написал(а):
linker
я планировал добавить старые айди потому что все данные пользователей(год рождения, пол и т.д) лежат в тех базах, и при авторизации все данные(ну или часть) закидывается в сессии

Спустя 5 минут, 19 секунд (8.07.2010 - 15:15) linker написал(а):
silius
Из референс таблицы тебе достаточно только авторизовать юзверя и получить его ID (добавить в таблицу user_id), по этому id уже сайт из своей базы извлекает данные пользователя. Тогда в референс таблицу нужно только добавить user_id.

site_id, user_id, login, pass

Спустя 3 минуты, 27 секунд (8.07.2010 - 15:19) silius написал(а):
ага, сразу не догнал biggrin.gif

Спустя 14 минут, 13 секунд (8.07.2010 - 15:33) linker написал(а):
Есть еще вариант: сливаем всех юзверей в одну таблицу с новыми new_id, а на каждом сайте просто храним связку id - new_id (чтобы сохранить привязку к статьям).

Спустя 7 минут, 9 секунд (8.07.2010 - 15:40) silius написал(а):
Ребят, а если постепенно проверять все базы, сначала проверяю базу того сайта, где юзер авторизируется, если нет, то в следующей базе?

Хотя мускул наверное будет трещать от напруга, тем более если логин и пароль как назло окажутся в последней базе laugh.gif
Да, этот вариант отпадает сразу smile.gif

Спустя 6 минут, 15 секунд (8.07.2010 - 15:46) linker написал(а):
silius, даже не думай в эту сторону.

Спустя 2 минуты, 30 секунд (8.07.2010 - 15:49) silius написал(а):
linker
это так, смешные мысли в слух под конец рабочего дня smile.gif


_____________
Windows - уникальная операционная система: в ней выключение компьютера начинается с нажатия кнопки ПУСК.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.