
Есть 5-ь сайтов, они полностью схожи. У каждого из них своя база (также схожая с остальными). В базе имеется таблица "user".
Пользователь заходит на любой один сайт, регистрируется, после чего может авторизироваться только на том сайте на котором зарегистрировался.
А теперь, что нужно сделать:
нужно сделать так, чтобы пользователь регистрировался на одном сайте, а авторизироваться мог на всех под своими логином и паролем.
был вариант слить таблицы в одну, но есть одно НО:
- контент сайтов связан по id пользователя, которые естественно перезапишутся в новой таблице, и сайт естественно рухнет
есть ещё один вариант:
- при авторизации сверять пару логин/пароль по базе одного сайта, если не найден, то переключаться на базу второго сайта и т.д.
Может у кого была подобная ситуация? Посоветуйте пожалуйста
Спустя 15 минут, 41 секунда (8.07.2010 - 11:45) waldicom написал(а):
А все базы лежат на доном хосте?
Спустя 1 минута, 18 секунд (8.07.2010 - 11:46) silius написал(а):
да, все базы и сайты на одном хосте, блин забыл уточнить, извеняюсь

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

Спустя 29 минут, 26 секунд (8.07.2010 - 12:32) vagrand написал(а):
silius ты не совсем понял что предлогает waldicom. Он предлогает сделать отдельную БД с одной таблицей юзеров. В эту таблицу будут попадать данные о всех юзерах со всех твоих сайтов. При логине ты проверяеш наличие юзера в БД сайта и если его там нет то делаеш проверку в этой таблице.
Вот как-то так
Вот как-то так
Спустя 22 минуты, 48 секунд (8.07.2010 - 12:54) silius написал(а):
vagrand, впринципе так и понял, может просто выразился несовем корректно.
В 'единой' таблице хочу сделать 4 поля:
id_new | login | password | id_old
____________________________
1 | name| 1234563 | site_id
id_old служит для определения сайта на котором юзер был зарегестрирован (для удаления его из старой базы)

В 'единой' таблице хочу сделать 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 за окном даёт о себе знать
waldicom,
id_old - может понадобиться для удаления самим пользователем, либо же для бана и т.д.
в остальном согласен

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

Спустя 11 минут, 56 секунд (8.07.2010 - 13:20) sergeiss написал(а):
Цитата (silius @ 8.07.2010 - 12:29) |
был вариант слить таблицы в одну, но есть одно НО: - контент сайтов связан по id пользователя, которые естественно перезапишутся в новой таблице, и сайт естественно рухнет |
Почему же "естественно"? Если ты правильно изменишь все связи, то ничего не рухнет.
Например, надо поменять id юзера с 236 на 10483274. Измени его во всех таблицах определенного сайта, где он присутствует... И всё будет нормально! Ничего не рухнет. С чего бы вдруг, если все взаимосвязи сохранены?
Проделай это во всех БД. Только обеспечь уникальность номера. И "будет тебе счастье"

И автоматизировать это всё не сложно.
А потом можешь уже "слить" все таблицы юзеров вместе, т.к. у них будут уже уникальные номера.
Спустя 7 минут, 39 секунд (8.07.2010 - 13:28) silius написал(а):
sergeiss
проблема ещё в том, что на каждом из сайтов за 5-ь минут регистрируются приблизительно 4 юзера, и оставляют объявлений за те же 5-ь минут приблизительно 10, 15, как быть с ними?
проблема ещё в том, что на каждом из сайтов за 5-ь минут регистрируются приблизительно 4 юзера, и оставляют объявлений за те же 5-ь минут приблизительно 10, 15, как быть с ними?
Спустя 9 минут, 15 секунд (8.07.2010 - 13:37) sergeiss написал(а):
Ну и чего из того?
Как я понимаю, айди пользователя для каждого сайта - автоинкрементный. А это значит, что можно установить для каждой таблицы некий номер, начиная с которого будут назначаться новые айди. И для разных таблиц они будут разные!!!
Например, есть у тебя где-то 50000 юзеров. Для первой таблицы установим новое "стартовое" значение для айди 100000, для второй - 150000, для третьей - 200000... После чего можно спокойно переименовывать старые айди, давая им диапазон от 50 до 100 тысяч. При этом новые юзеры будут спокойно регистрироваться, а твой скрипт будет спокойно менять старые айди.
Затем надо слить вместе все таблицы и тут же установить новый нижний порог для нового айди. Например, 300 тысяч. И всё, задача решена.
Существенно то, что ты проделываешь это только один раз. И не надо потом ничего "хронически" синхронизировать.
Как я понимаю, айди пользователя для каждого сайта - автоинкрементный. А это значит, что можно установить для каждой таблицы некий номер, начиная с которого будут назначаться новые айди. И для разных таблиц они будут разные!!!
Например, есть у тебя где-то 50000 юзеров. Для первой таблицы установим новое "стартовое" значение для айди 100000, для второй - 150000, для третьей - 200000... После чего можно спокойно переименовывать старые айди, давая им диапазон от 50 до 100 тысяч. При этом новые юзеры будут спокойно регистрироваться, а твой скрипт будет спокойно менять старые айди.
Затем надо слить вместе все таблицы и тут же установить новый нижний порог для нового айди. Например, 300 тысяч. И всё, задача решена.
Существенно то, что ты проделываешь это только один раз. И не надо потом ничего "хронически" синхронизировать.
Спустя 13 минут, 50 секунд (8.07.2010 - 13:51) silius написал(а):
sergeiss
а что? вполне интересно, ещё один интересный совет
Спасибо
а что? вполне интересно, ещё один интересный совет

Спустя 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 юзверя. Банальная ситуация-связка один ко многим и ведущий-ведомые.
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 написал(а):
ого, сбегал пообедал, а тут ещё написали
. Спасибо
linker, как я понял, ты предлагаешь сделать, как ранее написал я? Или я неправильно понял?

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

Спустя 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
Из референс таблицы тебе достаточно только авторизовать юзверя и получить его ID (добавить в таблицу user_id), по этому id уже сайт из своей базы извлекает данные пользователя. Тогда в референс таблицу нужно только добавить user_id.
site_id, user_id, login, pass
Спустя 3 минуты, 27 секунд (8.07.2010 - 15:19) silius написал(а):
ага, сразу не догнал

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

Да, этот вариант отпадает сразу

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

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