В настоящее время я интегрирую чат с открытым исходным кодом (AJAX Chat) в другой проект.Теперь чат по умолчанию просто получает действительных пользователей и действительные каналы из файла, но, очевидно, это не идеально, если у вас есть база данных с постоянно меняющимися пользователями.
Итак, я хочу сделать так, чтобычат загружает информацию о пользователе и канале прямо из базы данных.Я думал, что дизайн должен быть следующим (Если вы чувствуете по-другому, пожалуйста, дайте мне знать):
- У нас есть несколько каналов чата (общедоступный, маркетинг и т. Д ...)
- Затем у нас есть группы, назначенные каналам (например, пиар-команда 1, ИТ-специалисты и т. Д.).
- Затем у нас есть пользователи, которые входят в группы И в некоторых случаях назначаются непосредственно каналам.
Я думал о реализации вышеизложенного с помощью таблиц, подобных этим:
Таблица каналов:
|----|Channel_Name||Channel_ID||Groups_Assigned||Users_Assigned|----|
|----|---Public---||-----0----||---1,2,3,4,5---||-----3,4------|----|
.
.
.etc...
Примечание: Таблица назначенных групп содержит идентификаторы групп:группы, назначенные каналу, в то время как назначенные пользователи содержат идентификатор пользователей, которые не являются частью назначенных групп.
Таблица групп:
|----|Group_Name||Group_ID||Users_Assigned|----|
|----|---Team1--||----0---||------5,10----|----|
.
.
.etc...
Приносим извинения за плохо нарисованные таблицы.
Теперь, с вышеупомянутой реализацией, когда пользователь входит в систему, программа собираетсяполучить идентификатор пользователя (из таблицы пользователей), затем найти в таблице групп все группы, содержащие идентификатор пользователя, и, наконец, найти в таблице каналов все каналы, которые содержат либо группы (частью которых является пользователь), либо каналы, которыепусть пользователь назначен непосредственно ему.
Моя идея возможна, но кажется немного неэффективной.Поскольку мне нужно было бы хранить назначенные идентификаторы (как группы, так и пользователя) в формате 1,2,3....
, мне пришлось бы использовать либо PHP explode()
, либо какую-либо другую функцию PostgreSQL, которая может искать строки.Скорее всего, я буду хранить массив групп, а затем циклически повторять их все, по одной строке за раз, это мне кажется очень медленным.
Или я мог бы иметь логический столбец для каждого пользователя, ноэто приведет к слишком большому количеству столбцов, и я не хочу создавать новый столбец каждый раз, когда создается пользователь.
Итак, как бы вы, ребята, сделали это?И если по какой-то безумной причине вы согласитесь с моей первоначальной идеей, то не могли бы вы помочь мне понять, как на самом деле написать код, чтобы на самом деле это сделать.
Спасибо за ваше время, хорошегодень.