PHP - Сравнить соединения / канал из двух таблиц MySQL - PullRequest
0 голосов
/ 14 января 2012

Я работаю над небольшим проектом социальной сети, который позволит пользователям связываться друг с другом, подобно идее «друзей» в Facebook. Сайт имеет свои уникальные особенности, которые отличают его от других, поэтому, пожалуйста, оставляйте комментарии о том, что рынок социальных сетей насыщен.

Каждый раз, когда пользователь соединяется с другом, он добавляется в таблицу «Соединения» в БД MySQL. Каждый раз, когда пользователь отправляет подарок, приглашение или что-либо еще, он добавляется в таблицу «Лента».

Мне нужно иметь возможность отображать только активность друзей из таблицы «Лента», основываясь на соединениях в таблице «Соединения».

Моей первой мыслью было собрать все соединения для текущего пользователя, вошедшего в систему, из таблицы «Соединения» и поместить идентификаторы в массив. Затем выполните цикл по этому массиву, проверяя каждый идентификатор по таблице «Feed» на предмет активности. Это, однако, просто не кажется разумным способом сделать это. Это также сгруппирует все действия каждого пользователя вместе, а не в порядке, в котором это произошло.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 14 января 2012

Что-то вроде прямого соединения:

SELECT feed.*
FROM connections
JOIN feed
  ON connections.friend_id = feed.user_id
WHERE connections.user_id = <insert id of user>
0 голосов
/ 14 января 2012

Вы можете использовать предложение IN в MySQL, попробуйте это ..

select * 
from feeds f 
where user_id IN (
    select friends_id 
    from connections 
    where user_id = $user_id
)

ИЛИ

select * 
from feeds f join connections c 
on c.friends_id = f.user_id 
where c.user_id = $user_id

Объединения выполняются быстрее, чем подзапросы, также не забудьте добавить индексыв связанных столбцах (friends_id, user_id).

...