SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 24.10.2010 20:55:27

neon_tmn
Участник
Зарегистрирован: 24.10.2010
Сообщений: 3

Запрос выборки с соединением трех таблиц (идея - друзья, как вконтакте)

Здравствуйте, который день ломаю голову над тем, как написать запрос на выборку с соединением трех таблиц.
Пишу сайт, некое подобие социальной сети, как вконтакте.
То есть есть учетная запись, у этой записи по id могут быть друзья.
Но есть некоторая сдожность, у меня не просто друзья, но еще и группы.
1 - группа1
2 - группа2
3 - группа3.
описываю таблицы:
`users`:
-   user_id
-   user_avatar

`profile`:
-   user_id
-   group_id

`friend`:
-   user
-   friend_id
Опишу пример. авторизировались, имеем user_id, вот и нужно сделать выборку из таблицы friend, где user_id есть либо в user, либо в friend_id.
Но при этом нужно и user и friend_id соединить с users и profile, чтобы получить значение user_avatar.

Прошу не предлагатьс менить структуру данных, так как структура форума phpbb, я лишь добавил таблику friend.
если кому не понятно, вышлю схематино нарисованную связку.


Прикрепленные файлы:
Attachment Icon b.bmp, Размер: 720,438 байт, Скачано: 631

Неактивен

 

#2 24.10.2010 22:17:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Запрос выборки с соединением трех таблиц (идея - друзья, как вконтакте)

neon_tmn написал:

Прошу не предлагать сменить структуру данных, так как структура форума phpbb, я лишь добавил табличку friend.

То что хорошо в одном случае, не факт, что будет хорошо работать в других условиях.
Имеет смысл написать структуру, которая отвечает условиям вашей задачи, а не "учить верблюда плавать".


neon_tmn написал:

Опишу пример. авторизировались, имеем user_id, вот и нужно сделать выборку из таблицы friend, где user_id есть либо в user, либо в friend_id.
Но при этом нужно и user и friend_id соединить с users и profile, чтобы получить значение user_avatar.

Совершенно не ясен смысл деления данных на таблицы `users` и `profile`.
Чтобы получить значение user_avatar достаточно таблицы `users`

select * from `frend` f join `users` u on f.user = u.user_id where user = $user_id
union
select * from `frend` f join `users` u on f.user = u.user_id where frend_id = $user_id

Неактивен

 

#3 25.10.2010 21:43:09

neon_tmn
Участник
Зарегистрирован: 24.10.2010
Сообщений: 3

Re: Запрос выборки с соединением трех таблиц (идея - друзья, как вконтакте)

Я ж написал специально, что у меня интеграция сайта с форумом phpbb, следовательно и юзеры у меня хранятся в таблице phpbb-шной базы, поэтому я завишу от структуры данного форума.
Сделал вложенными запросами. Будет подольше работать конечно, но иного выхода я не вижу. Мне сложно здесь на форуме описать в полной мере что я имею и что мне нужно получить. Это связанно с задумкой сайта, то есть разные условия и так далее....

Неактивен

 

Board footer

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