Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从字段中删除特定数据而不完全覆盖_Mysql - Fatal编程技术网

Mysql 从字段中删除特定数据而不完全覆盖

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']."'

我在一个表中有一个字段,用于短名单中的工作。当用户将作业添加到短名单时,它将添加以逗号分隔的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']."'
我假设会有一些类似于我在上面所做的事情来实现这一点,但是我无法理解


任何帮助都将不胜感激。

因为您是用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代码来内爆/分解,以同样的方式删除作业。