【问题标题】:Store multiple values on MySQL table column and use them in a query?在 MySQL 表列上存储多个值并在查询中使用它们?
【发布时间】:2013-01-24 11:43:36
【问题描述】:

抱歉标题难以理解,但这里什么都没有:

我的用户表中有两种用户,trainee 和 coach。

Trainee 可以添加一个coach,coach 会看到trainee 在数据库上创建的东西。

这很简单,如果coach 只能有1 个trainee,只需将trainee 的用户ID 存储在名为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();

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

【问题讨论】:

  • 肯定存在错误的数据库结构。在教练和实习生之间应该有一对多的关系......在这种情况下,我会添加一个关系表,为每个实习生映射一张沙发......这样您就可以添加/更新/删除关系。

标签: php mysql arrays pdo


【解决方案1】:

我建议您再次查看您的数据库设计。最好有一个不同的表来存储教练和学员之间的关系。这样您就可以在需要时从表中添加/删除。

$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 注入。

【讨论】:

  • 我可能应该这样做,但问题仍然是一样的。
  • 我正在使用 pdo,所以所有的注射都是通过准备来处理的。
【解决方案2】:

给你:

创建另一个表,例如coach_to_trainee

coach_id INTEGER
trainee_id INTEGER

两者都是主键。

然后您可以简单地添加一对新的 couch_id

并以粗体字回答您的问题:是的,有可能。

编辑:创建表的 SQL:

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

【讨论】:

  • 啊,这正是我需要的!没想到,只是觉得练习生/教练只能在一张桌子上存在一次。
  • 但是我应该如何分配两个主键?
  • 如果您使用 phpmyadmin 创建表,您只需将值 PRIMARY 添加到设计表单的两列。如果您只使用 SQL,只需添加 PRIMARY(coach_id, trainee_id),就像您只为一个主列所做的那样...
  • 我正在使用 sqlbuddy,它只是给了我Multiple primary key defined
  • 您的数据库是 MySQL 吗?不知道sqlbuddy,但如果这只是 phpmyadmin 的替代品,那么它不允许有多个主键列是有问题的...尝试在我编辑的答案中使用纯 SQL .. .
【解决方案3】:

我不知道您的数据库和架构,但如果不是为每个教练存储学员列表并反过来为每个学员分配一名教练,这不是更容易吗?

如果不是,您可以存储逗号分隔值并稍后使用 PHP 解析它

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

【讨论】:

  • 天啊,真的吗?你是这样解决问题的吗?想想你的建议——每个学员都可以指派不止一位教练……-1
  • 这就是为什么我添加了“我不知道你的 DB”,但是如果你不得不说 2 种不同的运动你可以有每项运动的表,它会给你很大的灵活性,但前提是你没有 2 名教练来做同样的事情
  • 而且,一个实习生有超过3-4个教练是非常困难的,而且可能性很小,我看不出有这么大的杀伤力,一个人拥有超过10个教练肯定是不可能的对于同一时间的同一件事,我认为一般来说当然是一个糟糕的举动,但既然我们谈论的是培训和人民,我不明白为什么不使用这个事实
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
相关资源
最近更新 更多