在MySQL表列上存储多个值并在查询中使用它们?

时间:2013-01-24 11:43:37

标签: php mysql arrays pdo

对于难以理解的标题感到抱歉,但这里什么都没有:

我的用户表中有两种用户trainee& coach

Trainee可以添加coach,而coach会看到trainee将在数据库上创建的内容。

这很简单,如果coach只能有1个trainee,只需将trainee的userID存储在名为iscoachof的列上即可。但是,多个用户必须能够添加教练,因此iscoachof可以包含比一个更多的用户ID。与34,72,345,87,97一样。

所以,这是我当前的代码,它将使用新值更新列iscoachof

 $fd = $_POST['coach'];
 $user = $_SESSION['login']['id'];
 $query = "UPDATE users SET iscoachof='$user' WHERE id='$fd'";
 $add = $db->prepare($query);
 if($add->execute()){
   echo "Lisätty";
 }
 else{
 echo "Ei lisätty";
 } 

它只是覆盖当前值,这不是一个选项。

所以,我需要做一些像

这样的事情
$currentval =  "SELECT iscoachof FROM users WHERE id='$fd';
$do = $db->prepare($currentval);
$do->execute();
while($row = $do->fetchObject()){
$currentval = $row->iscoachof;
}

要在更新之前获取当前值,但我应该如何存储它以便稍后在$data

的地方使用此类查询
$q = "SELECT * FROM diaries WHERE UserID='$data' AND date='$today'";
$do = $db->prepare($q);
$do->execute();

基本上,是否可以将它存储在一个数组中,稍后将其保存到数据库中以提取值?

3 个答案:

答案 0 :(得分:3)

我建议您再次查看数据库设计。最好有一个独特的表来存储教练和受训者之间的关系。这样,您可以随时在表格中添加/删除。

$fd = $_POST['coach'];
$user = $_SESSION['login']['id'];
$query = "INSERT into coaches SET coach='$fd', user=$user";
$add = $db->prepare($query);
if($add->execute()){
 echo "Lisätty";
}
else{
echo "Ei lisätty";
} 

但要小心POST变量,否则你将接受SQL注入。

答案 1 :(得分:1)

你走了:

创建另一个表格,例如coach_to_trainee

coach_id INTEGER
trainee_id INTEGER

都是主键。

然后你可以简单地添加一对新的couch_id< - trainee_id。在这种情况下,假设一名受训者可以有多名教练,而一名教练可以分配给许多受训人员,这将是一个很多关系...

用粗体回答你的问题:是的,这是可能的。

编辑:用于创建表格的SQL:

CREATE TABLE `coach_to_trainee` (
  `coach_id` INTEGER NOT NULL,
  `trainee_id` INTEGER NOT NULL,
  PRIMARY KEY (`coach_id`, `trainee_id`)
)

答案 2 :(得分:-2)

我不知道你的数据库和架构,但是不会更容易,而不是为每个教练存储学员名单而反过来为每个学员分配教练?

如果没有,你可以存储逗号分隔值,稍后用PHP

解析它 编辑:但正如其他人所说,没有必要做后一件事,因为你可以有一个方便的一对多关系,所以每个教练都有一个表和每个用户的表,然后为每个用户分配一个教练示例