У меня есть приложение для простых событий, в котором есть события и пользователи, пользователи могут присоединиться к нескольким событиям. Каждое событие представляет собой одну строку в таблице событий. У пользователей есть своя таблица пользователей.
Я пытаюсь найти самый простой и экономичный способ хранения всех тех пользователей, которые посещают событие. В настоящий момент, думая о сохранении идентификатора пользователя в поле "Участники" в таблице событий, я должен был бы разделить их запятой.
Я нахожусь с этой частью, но я изо всех сил пытаюсь придумать способ прочитать это поле, разделить их на массив и затем получить полное имя каждого пользователя.
Надеюсь, это имеет смысл.
Не делай этого. 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>;
Использование 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
вы можете использовать json format
подобный этому
$events=array('evnt1','evnt2'............,'eventn');
$tostore=json_encode($events); // op will in json string format
в запросе mysql используйте $tostore
для хранения данных
для дальнейшего использования вы можете использовать
$allevents=json_decode($evemtsfromdb);
он вернет массив событий
MySQL
, не json_encode()
а serialize()
. Даже если вы это сделаете, это неправильный способ хранения данных в MySQL
.
explode()
данные таблицы, пройтись по массиву и получить данные каждого пользователя.