在单个字段中存储多个用户

时间:2015-03-26 13:10:38

标签: php mysqli

我有一个简单的事件应用程序,其中有事件和用户,用户可以加入多个事件。每个事件都是事件表中的一行。用户有自己的用户表。

我正在尝试找到最简单,最经济的方式来存储所有参加活动的用户。目前我想将用户ID存储在事件表的参与者字段中 - 我将不得不用逗号分隔它们。

我找到了那个部分,但是我很难想到一种方法来读取这个字段,将它们分成一个数组,然后获取每个用户的全名。

希望这是有道理的。

3 个答案:

答案 0 :(得分:3)

不要这样做。 MySQL是一种关系数据库模型,因此请继续使用关系。在这种情况下,请创建一个包含两列的新考勤表:用户ID和事件ID。

它将使您的任务变得更加轻松;如果您需要为一个用户查找所有事件,就像查找一个事件的所有用户一样简单。

例如,让所有与会者'名字,就像

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>;

答案 1 :(得分:0)

您可以像这样使用json format

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

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

在mysql查询中使用$tostore来存储数据

进一步使用,您可以使用

$allevents=json_decode($evemtsfromdb);

它将返回事件数组

答案 2 :(得分: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