2010-03-29 4 views
-6

Я хотел бы создать базу данных, где храню ссылки между людьми.Сохранение связей между людьми в базе данных MySql

Затем мне нужно вернуть записи, в которых люди подключены к другим.

мне нужно вывести: person1 подключен к person2 связан с person3 и т.д.

Как я могу начать с этой задачей?

+2

Думаю, вам нужно более подробно объяснить, что вы имеете в виду. Возможно, вы пытаетесь создать систему, в которой у людей есть друзья (или какая-то другая связь), а затем пытаются выяснить, кто с кем связан. Или это может быть совсем другое. Боюсь, вы * должны * задавать ** ответные ** вопросы. И нынешний много проголосовавший статус вопроса заключается в том, что он действительно не отвечает, потому что у нас недостаточно информации о том, что вы после. –

ответ

3

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

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

Допустим, у нас есть три пользователя: user1, user2, user3, которые имеют следующий пользователь идентификаторами:

user1 -> 1

user2 -> 2

user3 -> 3

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

Теперь давайте иметь таблицу секунд с двумя столбцами для нашего фактического «соединения» между людьми, мы будем называть это «tblconnections» с помощью столбцов «cid» «cuser» и «ccon».

чид является первичным ключом cuser это идентификатор пользователя из tblusers, который только что создал соединение CCON это идентификатор подключенного пользователя в tblusers

Так позволяет принимать следующие две раскладки таблицы:

tblusers:

------------------- 
uid | uname | uage 
------------------- 
0 | Joe | 22 
1 | Bob | 54 
2 | Tod | 14 

tblconnections

------------------- 
cid | cuser | ccon 
------------------- 
0 | 1  | 2 
1 | 1  | 0 

Теперь это говорит о том, что пользователь с идентификатором «1» имеет два подключения: один для пользователя «2» и один для пользователя «0» в tblusers, поэтому пользователь 1 (Боб) имеет соединение с Тодом, а также с Джо.

С помощью этой информации вы можете выполнить простой запрос MySQL, такие как:

SELECT uid AS id, (SELECT GROUP_CONCAT(cconn) FROM tblconnections WHERE cuser = id) FROM tblusers; 

Это вернет свой обычный ISER идентификатор из «tblusers», а также каскадная строка всех подключенных пользователей.Таким образом, идентификатор пользователя может быть «3», а конкатенированная строка может выглядеть так: 2,6,22,45,67,8, которая является списком всех пользователей, подключенных к пользователю «3» в этом случае.

Обратите внимание, что существует много других способов возврата каждой связанной информации о пользователях вместе с вашим запросом, это просто пример.

Если вы хотите ознакомиться с учебными пособиями, просто «отношения с базами данных», «отношения от одного до многих много к одному» или «отношения таблицы mysql».

Надеюсь, что это проливает свет на вашу проблему.

Имейте хороший.

Смежные вопросы