Я просто хотел бы найти структуру базы данных в MySQL, чтобы получить всех пользователей, друзей друзей и соответствующий запрос, чтобы получить их. (дружеские ссылки являются двунаправленными)
Я нашел пару сообщений, связанных с этим, но меня беспокоит производительность:
Структура 1
Многие посты предлагают структуру, в которой у вас есть таблица, в которой каждая строка представляет ссылку дружбы, например:
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 миллиона строк.
Структура 2
Если бы я мог использовать такую структуру:
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 я думаю, что "join row with column " может быть медленным, если даже здесь возможно использовать соединение. Спасибо за любые предложения. Если бы вы могли подумать о каких-либо других структурах, возможно, воспользовавшись преимуществами сети малого мира, я был бы рад их услышать.
СПАСИБО !!