Как получить связанные элементы без выбора каждого идентификатора - PullRequest
0 голосов
/ 07 июня 2011

Я должен сделать дизайн базы данных для Friend-Network. Когда я добавляю кого-то как друга, я фактически добавляю его уникальный идентификатор в таблицу с двумя столбцами.

| USER 1 | USER 2 |

Поэтому, когда я хочу узнать, кто является кем-то из друзей, я делаю SELECT в этой таблице в поисках идентификатора.

Но проблема в том, что, когда я хочу показать список друзей, мне нужно найти всех его друзей, а затем выполнить поиск каждого идентификатора в поисках подробностей. Это просто не выглядит правильно.

Есть ли более эффективный способ сделать это? Могу ли я создать свою базу данных? Есть ли место, где мы можем узнать больше о дизайне баз данных?

Ответы [ 2 ]

1 голос
/ 07 июня 2011

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

SELECT * FROM People p1
         INNER JOIN Friends f on p1.id = f.id1 and p2.id = f.id2
         INNER JOIN People p2 on p2.id = f.id2
       WHERE p1.id = 6123
1 голос
/ 07 июня 2011

Ваш дизайн мне подходит.Однако загляните в СОЕДИНЕНИЯ, которые помогут вам избавиться от вложенных запросов, чтобы получить информацию для пользователей.СОЕДИНЕНИЯ позволят вам получить всю информацию об обоих пользователях в одном запросе, а затем вы можете просмотреть и распечатать список.

Запрос может выглядеть примерно так:

SELECT 
     u.name 
FROM 
     friends f 
     JOIN users s ON (u.id = f.user_id_2) 
WHERE 
     f.user_id_2 = 1234
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...