php - MySQL 选择全部并根据另一列更新特定列字段

标签 php mysql sql sql-update

我试图从表中选择所有行,并更新同一表中的列值(基本上是标题列的自动段/永久链接重写)。但是,当我这样做时,它只是从所有行中的第一个 ID 插入相同的“slug/permalink”重写,而不是单独重写和插入每行的标题。

<?php
$sql = "SELECT * FROM titles"; 
$query = mysqli_query($con, $sql) or die (mysqli_error());
while ($row = mysqli_fetch_array($query)) { 
    $id = $row["id"];
    $title = $row["title"];

    // title rewrite function goes here
    $permalink = preg_replace ..... etc

    //add new permalink rewrite to slug column
    $sql2 = "UPDATE titles SET permalink='$permalink' WHERE id='$id'"; 
    $query2 = mysqli_query($con, $sql2) or die (mysqli_error());
} 
?>

目前,结果如下:

ID   Title              Permalink
1    This is Title 1    this-is-title-1
2    This is Title 2    this-is-title-1
3    This is Title 3    this-is-title-1

我也尝试过不使用 WHERE id='$id' 部分,但这不会改变任何东西......

非常感谢任何建议!谢谢

最佳答案

您确定您的 $permalink 分配正确吗?根据您想要的输出,我为永久链接创建了一个片段并测试了代码(还更正了 mysqli_error 函数..)

$sql = "SELECT * FROM titles";
$query = mysqli_query($con, $sql) or die (mysqli_error($con));
while ($row = mysqli_fetch_array($query)) {
    $id = $row["id"];
    $title = $row["title"];

    // title rewrite function goes here
    //$permalink = preg_replace ..... etc
    $permalink = preg_replace('~\s+~', '-', strtolower($title));

    //add new permalink rewrite to slug column
    $sql2 = "UPDATE titles SET permalink='$permalink' WHERE id='$id'";
    $query2 = mysqli_query($con, $sql2) or die (mysqli_error($con));
}

这段代码对我来说效果很好。如果这不能创建正确的输出,则您的数据库表数据可能有问题

顺便说一句。您可以使用 https://stackoverflow.com/a/8419128/1043150 中的 sql 过程并将整个代码分解为单个 SQL 语句

UPDATE titles SET permalink = slugify(title)

关于php - MySQL 选择全部并根据另一列更新特定列字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20338990/

相关文章:

php - 基于多选 jQuery 和 PHP 显示 DIV 文本

php - MySQL从5.0升级到5.5后的查询时间

php - 如何将数据库表中的 SQL 数据回显到 <select> 表单中?

mysql - 如何优化/重构sql,例如“order by column1 + column2

mysql - FROM 子句中的 SQL 子查询

php - Laravel 多站点

javascript - 将数组值从 php 复制到 javascript

php - 在 PHP 和 MySQL 上处理时区的最佳方法是什么?

mysql - 在 MySQL 8.0 中自动插入额外的列

php - 无法使用php连接到本地数据库