Публиковать данные из массива в базу данных - PullRequest
0 голосов
/ 13 марта 2020

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

Таким образом, пользователи содержат «id», «name», «lastname», «group» и некоторые другие, которые не важны. Группы таблиц содержат только идентификатор и имя группы. Эти группы являются динамическими c, иногда группа добавляется, а иногда группа удаляется.

На внешнем интерфейсе люди могут добавлять себя в группу с помощью формы с выбранным кратным числом

Но я не получаю дальше, чем это. Я сталкиваюсь с двумя проблемами. Данные, собранные из, находятся в массиве, поэтому поместить их в запрос SQL непросто. (я думал поместить всю информацию из массива в одну переменную, разделенную ",") с другой стороны, возможно, этот формат таблицы не лучший способ сделать это.

Так что я Я спрашиваю у вас, ребята. Лучше изменить структуру таблицы и на что? Как мне объединить массив в одну переменную, чтобы я мог поместить их в базу данных (разделенные символом ",") <\ s>

РЕДАКТИРОВАТЬ !: В соответствии с рекомендациями Энди Холла, я создал новую таблицу , werkgroep_user с id, werkgroep_id и user_id.

Вот как выглядит мой выбор

<select id="testwerkgroep" name="testwerkgroep[]" multiple>
 <option value="">geen werkgroep</option>
 <option value="1">werkgroep 1</option>
 <option value="2">werkgroep 2</option>
</select>

Теперь я столкнулся с проблемой получения данных из БД. Я хочу, например, всех пользователей (имя) и их группы (имя)

1 Ответ

2 голосов
/ 13 марта 2020

Похоже, ваши таблицы пользователей и групп имеют отношение многие ко многим. «Многие пользователи могут быть частью многих групп».

Без разрешения отношения «многие ко многим» с промежуточной таблицей вы, безусловно, можете использовать строку значений, разделенных запятыми, в поле users.group. Вы бы достигли этого, используя функцию implode() в вашем массиве идентификаторов групп:

$commaSeparatedGroupIdString = implode($groupIdArray);

А когда вы извлекаете данные из базы данных, вы можете разложить их обратно в массив :

$groupIdArray = explode($commaSeparatedGroupIdString, ",");

Второй (и, я бы сказал, лучше ) метод заключается в разрешении отношения «многие ко многим» с помощью таблицы-посредника. Эта таблица может быть названа примерно как group_assignments. У одного user может быть много group_assignments, а у одного group может быть много group_assignments.

Структура таблицы group_assignment будет такой:

id primary ключ

user_id внешний ключ к полю users.id

group_id внешний ключ к полю groups.id

Всякий раз, когда пользователь желает назначить себя group, они сделают отправку, и ваше приложение создаст новую запись в таблице group_assignments с идентификатором пользователя и идентификатором группы, которую они представили для назначения. Получение информации о назначении группы для пользователя может потребовать использования JOIN в ваших SQL для захвата всех связанных group_assignment записей для вашего пользователя. Удаление назначения так же просто, как удаление соответствующей записи в таблице group_assignments.

...