Mysql 从字段中删除特定数据而不完全覆盖
我在一个表中有一个字段,用于短名单中的工作。当用户将作业添加到短名单时,它将添加以逗号分隔的ID 例如:Mysql 从字段中删除特定数据而不完全覆盖,mysql,Mysql,我在一个表中有一个字段,用于短名单中的工作。当用户将作业添加到短名单时,它将添加以逗号分隔的ID 例如:“1,2,3,4,5” 假设客户从他们的短名单中删除了一个作业,我需要删除字段中的值,而不删除其他ID 因此,如果我们删除ID 4,我需要它将字段值更新为:“1,2,3,5” 要添加数据,我使用当前查询: UPDATE users SET shortlist = concat(shortlist, '".$r['jobid'].",') WHERE uid='".$row['uid']."'
“1,2,3,4,5”
假设客户从他们的短名单中删除了一个作业,我需要删除字段中的值,而不删除其他ID
因此,如果我们删除ID 4,我需要它将字段值更新为:“1,2,3,5”
要添加数据,我使用当前查询:
UPDATE users SET shortlist = concat(shortlist, '".$r['jobid'].",') WHERE uid='".$row['uid']."'
我假设会有一些类似于我在上面所做的事情来实现这一点,但是我无法理解
任何帮助都将不胜感激。因为您是用PHP创建列表的,所以也可以使用PHP对其进行修改
$stmt = $pdo->prepare("SELECT shortlist FROM users WHERE uid = :uid");
$stmt->execute(array(':uid' => $uid));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$shortlist = explode($row['shortlist']);
$pos = array_search('4', $shortlist);
if ($pos !== false) {
unset($shortlist[$pos]);
$shortlist_str = implode($shortlist);
$stmt = $pdo->prepare("UPDATE users SET shortlist = :shortlist WHERE uid = :uid");
$stmt->execute(':uid' => $uid, ':shortlist' => $shortlist_str));
}
通常会为这次操作创建一个联接表。比如说一个像
users\u jobs
这样的表,它有user\u id
和job\u id
——这是一个更加坚实的结构。从表中删除一行要比弄乱一个糟糕的数据结构容易得多。@skrilled我以前确实有过这种结构,但是我认为它可以通过将jobid
插入特定于用户的字段来保存数据。然后,我会将每个jobid
的逗号分解,并将结果显示在他们的短名单页面上。用PHP实现。选择值,分解它,删除不需要的项,内爆它,然后更新表。@mattymarke您正在保存字节,可能是千字节/甚至可以说是更好、更有效的。你原来的结构好多了。目前,您必须运行两个查询才能在一个查询中完成(列出用户的所有作业)。正如您所看到的,您必须执行多个查询并结合php代码来内爆/分解,以同样的方式删除作业。