2016-09-14 5 views
0

Я создаю сайт, на котором пользователи могут присоединиться к определенным группам. Теперь мне нужно поддерживать набор пользователей в каждой группе и/или группе групп, к которым присоединился каждый пользователь. Поскольку MySql не поддерживает массивы, я не могу утверждать, что массив пользователей в группе (как поле в таблице «groups») или массив групп у пользователя (как поле в таблице «users») , Итак, как я могу это достичь?mysql - Ведение подписки Список группы на сайте

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

SELECT USERID FROM SUBSCRIPTIONS WHERE GROUPID=3 

или

SELECT GROUPID FROM SUBSCRIPTIONS WHERE USERID=4 

Это поможет мне нужные списки. Это самый эффективный/стандартный способ сделать это или есть лучший способ?

ответ

1

Вы написали все.

Обычно существует 3 типа отношений между записями в относительных базах данных:

  1. Один - один (например, user и profile связанный через user.profile_id = profile.id)
  2. Один - много (user и messages связаны через message.user_id = user.id)
  3. Много - много

Ваш случай - это лас t, и он всегда работает через 3-й стол.

В вашем случае это может быть users_subscriptions (user_id, subscription_id)

Пример запроса для выбора всех пользователей с их подписками:

SELECT u.name, GROUP_CONCAT(s.name) as `subscriptions` 
FROM users u 
JOIN users_subscriptions us ON us.user_id = u.id 
JOIN subscriptions s ON us.subscription_id = s.id 
GROUP BY u.id 
+0

Спасибо @Stalinko! – samurdhilbk

1

Если я правильно понимаю ваш вопрос, что является стандартным способом.

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