Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как более рационально реализовать БД, юзеры, города 
V
    Опции темы
langolier
  Дата 26.8.2008, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.7.2008

Репутация: нет
Всего: нет



Здравствуйте!
Есть таблица в mySQL, "города"(id, name), также есть таблица "юзеры"(id, name и т.д.)
Как сделать чтобы к одному юзеру можно было привязать больше одного(a то и все) города??
Обязательно создавать промежуточную таблицу(user_id, city_id)??
Или можно как-то проще сделать? Что бы потом можно было делать выборку всех юзер с одного города..
Городов много и юзеров будет не мало...
Спасибо за ответ)
PM MAIL   Вверх
bars80080
Дата 26.8.2008, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



Цитата(langolier @  26.8.2008,  12:59 Найти цитируемый пост)
создавать промежуточную таблицу(user_id, city_id)

так и делают


Цитата(langolier @  26.8.2008,  12:59 Найти цитируемый пост)
Что бы потом можно было делать выборку всех юзер с одного города

делаем просто выборку по этой таблице:
Код

select * from city_table where city_id=5

PM MAIL WWW   Вверх
langolier
Дата 26.8.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.7.2008

Репутация: нет
Всего: нет



Цитата(bars80080 @  26.8.2008,  13:52 Найти цитируемый пост)
Цитата(langolier @  26.8.2008,  12:59 )создавать промежуточную таблицу(user_id, city_id)так и делают


я знаю, что так и делают  smile 
просто ищу более рациональное решение...
PM MAIL   Вверх
bars80080
Дата 26.8.2008, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



вряд ли существует более рациональное решение. сами можете посмотреть в php:БД через одну темы про оптимальное построение таблиц и взаимосвязи и везде именно так и предлагается
PM MAIL WWW   Вверх
langolier
Дата 26.8.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.7.2008

Репутация: нет
Всего: нет



ок, спасибо за ответ
PM MAIL   Вверх
langolier
Дата 27.8.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 29.7.2008

Репутация: нет
Всего: нет



А как тогда сделать запрос, что бы например показать все города для данного юзера, при учёте что может быть как 1 город, так и 3?

Таблицы:

users    ........Таблица с юзерами
   id
   user_name


cities    ........Таблица с городами
   id
   city_name

user_city    ........Промежуточная таблица для связи городов и юзеров
   city_id
   user_id
PM MAIL   Вверх
bars80080
Дата 27.8.2008, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 9
Всего: 315



я б сделал так:
выбираем города select * from cities и здесь бы я постарался создать массив в котором id - порядковый номер, т.е. что-то вроде
$mv = mysql_fetch_array($res);
$city[$mv['id']] = $mv['city_name'];

у нас есть user_id , значит делаем select * from user_city where user_id=$user_id
затем при выводе данных по пользователю просто подставляем не id а значение массива по этому id

PM MAIL WWW   Вверх
gta4kv
Дата 27.8.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



Код

select city_name from cities where id=(select * from user_city where id='номер юзера');

что-то типа того, как правильно написать мысли проскакивали, но не успел я их зафиксировать smile

Это сообщение отредактировал(а) gta4kv - 27.8.2008, 14:10
PM MAIL   Вверх
HackMan
Дата 28.8.2008, 03:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

Репутация: нет
Всего: 9



gta4kv, возможно ты имел в виду что-то вроде этого
Код

SELECT city_name FROM cities WHERE id IN (SELECT city_id FROM user_city WHERE user_id='номер юзера')


Но запросы с подзапросом выполняются на несколько порядков медленнее, чем без таковых. Лучше сделать так:
Код

SELECT city_name FROM cities, user_city WHERE cities.id=user_city.city_id AND user_id='номер юзера'



Это сообщение отредактировал(а) HackMan - 28.8.2008, 04:00


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
gta4kv
Дата 28.8.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 4
Всего: 91



HackMan, пытался написать второй, вышел первый.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0630 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.