Я просто хотел бы найти структуру базы данных в MySQL, чтобы получить всех пользователей друзей друзей и соответствующий запрос для их получения. (дружеские ссылки двунаправленные)
Я нашел пару сообщений, связанных с этим, но меня беспокоит производительность:
Многие сообщения предлагают структуру, в которой у вас есть таблица, в которой каждая строка представляет собой дружескую ссылку, например:
CREATE TABLE `friends` (
`user_id` int(10) unsigned NOT NULL,
`friend_id` int(10) unsigned NOT NULL,
)
говорит, что у пользователя «1» есть три друга «2», «3», «4», а у пользователя «2» есть два друга «1», «5». Ваша таблица друзей будет выглядеть так:
user_id | friend_id
1 | 2
1 | 3
1 | 4
2 | 1
2 | 5
друзья друзей запрос: Как выбрать друзей друзей можно увидеть здесь SQL для получения друзей И друзей друзей пользователя . Результат запроса для пользователя «1» должен дать (1,2,3,4,5)
Мое беспокойство: у среднего пользователя fb около 140 друзей. У постоянных пользователей будет намного больше. Если у меня будет 20 000 пользователей, это будет как минимум 3 миллиона строк.
Если бы я мог использовать такую структуру:
CREATE TABLE `friends` (
`user_id` int(10) unsigned NOT NULL,
`friend_1` int(10) unsigned NOT NULL,
`friend_2` int(10) unsigned NOT NULL,
`friend_3` int(10) unsigned NOT NULL,
`friend_4` int(10) unsigned NOT NULL,
....
)
Моя таблица выглядела бы так (пример сверху):
user_id | friend_1 | friend_2 | friend_3 | ...
1 | 2 | 3 | 4 |
2 | 1 | 5 | |...
Теперь у меня всего 20 000 строк.
Друзья друзей запрос: Чтобы выбрать пользователей друзей друзей, я попробовал
Select * FROM friends as a
WHERE a.user_id
IN (
SELECT * FROM friends AS b
WHERE b.user_id = '1'
)
, но получаю сообщение об ошибке «# 1241 - Операнд должен содержать 1 столбец». Я думаю, проблема в том, что подвыбор передает строку, а не столбец?
Надеюсь, вы понимаете мою озабоченность. Я был бы очень рад любым ответам на эти вопросы
1) найти запрос, который возвращает всех друзей друзей для указанного пользователя в структуре 2 ?
2) Какая структура позволяет мне быстрее возвращать друзей друзей? В структуре 2 я думаю, что «соединение строки с столбцом » может быть медленным, если здесь даже возможно использовать соединение. Спасибо за любые предложения. Если бы вы могли придумать какие-либо другие структуры, возможно, воспользовавшись преимуществами типа сети «маленький мир», я был бы рад их услышать.
СПАСИБО !!