0

我正在浏览一个带有一些功能问题的旧 php 应用程序。我遇到了以下代码,该代码似乎旨在重置表中的 id:

    SET @num := 0;
    UPDATE `pop_table` SET id = @num := (@num+1);
    ALTER TABLE `pop_table` AUTO_INCREMENT =1;

那么... ':=' 运算符到底是干什么用的?- 这个特定片段中的替代方案是什么?

我在这里搜索过,php.net,google,显然“:=”太小或太难找到,或者我只是不知道如何对其进行适当的搜索。感谢您的任何想法。

4

4 回答 4

5

也就是说,SQL is := 是至少 MySQL 的可变赋值。

于 2012-09-10T17:12:06.860 回答
4

这不是 PHP 代码。这是MySQL。

这是一个 MySQL 函数

SET @num := 0

这意味着将值0分配给变量@num(请参阅MySQL 手册

这用于

UPDATE pop_table SET id = @num := (@num+1);

为了使其更易于理解,PHP 等价物将是:

$num = 0;(这不是真正的可比性,只是为了得到这个想法)

更新

我受到评论的启发,做了不推荐的PHP 解决方案。

$query = mysql_query("SELECT id FROM pop_table ORDER BY id ASC");
$id = 0;
while($result = $mysql_fetch_assoc($query)) {
    $id++
    mysql_query("UPDATE pop_table SET id = " . $id . " WHERE id=" . $result["id"]);
}
mysql_query("ALTER TABLE `pop_table` AUTO_INCREMENT =1;");

没有测试它,但应该工作。

于 2012-09-10T17:13:08.737 回答
4

这是MySQL 使用的赋值运算符

您通常无法将 MySQL 代码转换为 PHP 代码。MySQL 用于查询数据库表并返回符合某些条件的数据。

PHP 是一种可以用来做很多事情的编程语言,但是用 PHP 代码替换 MySQL 代码(假设您找到了这样做的方法)可能会导致您的 PHP 脚本非常慢。

PHP 手册
MySQL 手册

于 2012-09-10T17:13:58.803 回答
1

你知道它已经是 Mysql 中的赋值运算符了……@num 是一个数据库变量。

但是整个片段有什么作用呢?它在循环中将整个表中的“id”字段更新为一个不错的增量范围,从 1 到 N,其中 N 是总行数:第一个更新的行获得值 1,下一行获得值 2,然后是 3等.... 最后,它将 id 列的性质更改为自动递增的列。(这可能有助于将自动增量计数器的当前值重置为比当前最大值大一,我不确定。)

为什么需要将其转换为 PHP?这旨在仅运行一次,并且仅用于清理数据库。就这些。而且,如果您想不时运行它,那么在数据库之外运行它根本没有意义。

于 2012-09-10T19:00:30.273 回答