Структура БД для дома Twitter / стены Facebook? - PullRequest
1 голос
/ 29 марта 2010

В основном прямая трансляция последних сообщений всех ваших друзей.

При таком глупом подходе я думаю, что начну с создания запроса вроде:

SELECT * FROM tblposts WHERE userid= friend_id_1 OR userid= friend_id_2 ...... и т. Д.

Где friend_id_% - это идентификатор пользователя из вашего списка друзей. Но это должно быть очень неэффективным способом, верно? Есть ли более быстрый способ сделать это в MySQL? Может, какая-нибудь умная схема БД?

(я знаю, что FB использует Hadoob, но у меня недостаточно опыта, чтобы заходить так далеко :()

Ответы [ 2 ]

2 голосов
/ 29 марта 2010

Если у вас есть список идентификаторов, которые вы хотите запросить, вы должны использовать IN:

SELECT * FROM tblposts WHERE userid IN (friend_id_1, friend_id_2, ...)

Но в этом случае я думаю, что вместо этого вы можете использовать соединение.

SELECT * FROM tblposts AS T1
JOIN (
   SELECT friendid             -- I just made up this query.
   FROM friends                -- You need to replace it with the
   WHERE userid = 'youruserid' -- real query to get someone's friends.
) AS T2
ON T1.userid = T2.friendid
0 голосов
/ 29 марта 2010

Извините за удар, но я думаю, что приведенный выше запрос подразумевает, что в таблице friends есть много избыточных записей? (х дружит с у, у дружит с х; 2 записи?)

Если в таблице friends есть поля sender_id receiver_id и request_status, можно ли изменить приведенный выше запрос таким образом, чтобы он возвращал список друзей по youruserid, т. Е. Выберите значение receive_id if sender_id == youruserid и наоборот, поэтому мы получаем один список всех друзей youruserid? Я не могу придумать лучшую таблицу, чтобы избежать дублирования.

...