使用不同的值更新整个列

时间:2017-10-04 08:18:13

标签: php mysql

我需要更新tags列,以便每个单元格都有如下内容:
2-5-1-14-5

3-9-14-19-23
或者simmilar(五个整数,范围从1-25)。

id列不是从1-117连续的,但无论如何min id是1和最大117.

$arr = [];
$str = '';
$id = 1;
for ($x = 1; $x <= 25; $x++){
    array_push($arr, $x);
}
while ($id < 117) {
shuffle($arr);
array_splice($arr, 5, 25);
foreach ($arr as $el){
    $str .= $el . '-';
}
$str = rtrim($str,'-');
$db->query("update posts set tags = '" . $str . "' where id = " . $id);
$id += 1;
}

我不确定如何描述最终结果,但似乎大多数单元格都被多次写入。

任何帮助?

1 个答案:

答案 0 :(得分:1)

将我的评论合并为一段代码:

$full = range(1, 25);
$id   = 1;
while ($id < 117) {
    shuffle($full);
    $section = array_slice($full, 0, 5);
    $str     = implode('-',$section);
    $db->query("update posts set tags = '" . $str . "' where id = " . $id);
    $id += 1;
}

因此我不再需要重置$str,因为我已将implode()插入其似乎正常运行的位置。其他代码可能会得到改进。

两个警告:

  • 直接在查询中使用PHP变量不是一个好主意。请使用参数绑定。这段特殊的代码可能不容易受到SQL注入攻击,但如果你在其他地方做同样的事情则可能会这样。
  • 您的数据库似乎没有规范化。从长远来看,当您扩展应用程序时,这可能会给您带来麻烦。