Хранение нескольких идентификаторов пользователей в одном поле

0

У меня есть приложение для простых событий, в котором есть события и пользователи, пользователи могут присоединиться к нескольким событиям. Каждое событие представляет собой одну строку в таблице событий. У пользователей есть своя таблица пользователей.

Я пытаюсь найти самый простой и экономичный способ хранения всех тех пользователей, которые посещают событие. В настоящий момент, думая о сохранении идентификатора пользователя в поле "Участники" в таблице событий, я должен был бы разделить их запятой.

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

Надеюсь, это имеет смысл.

  • 0
    Вы можете хранить массив всех событий в формате json_encode и при необходимости использовать json_decode
  • 0
    На стороне PHP вы всегда можете просто explode() данные таблицы, пройтись по массиву и получить данные каждого пользователя.
Теги:
mysqli

3 ответа

3
Лучший ответ

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

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

Например, чтобы получить имена всех участников, это будет что-то вроде

SELECT u.name
FROM user u
    INNER JOIN attendance a ON a.userid = u.id
    INNER JOIN event e ON a.eventid = e.id
WHERE e.id = <youreventid>;
  • 0
    Я должен подумать об этом сам, правда, немного глупо.
0

Использование explode - быстрый и простой способ сделать это, используя описание, разделенное запятыми.

$attendees = explode(',', $db_result['attendees']);
foreach ($attendees as $attendee_id)
{
    // code here to get attendee name
}

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

attendee_id | event_id
----------------------
3           | 1
4           | 1
6           | 2
0

вы можете использовать json format подобный этому

$events=array('evnt1','evnt2'............,'eventn');

$tostore=json_encode($events); // op will in json string format

в запросе mysql используйте $tostore для хранения данных

для дальнейшего использования вы можете использовать

$allevents=json_decode($evemtsfromdb);

он вернет массив событий

  • 0
    Мне всегда нужно хранить несколько значений в одном поле в MySQL , не json_encode() а serialize() . Даже если вы это сделаете, это неправильный способ хранения данных в MySQL .
  • 0
    в чем проблема с json_encode
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню