php - 如何创建一个新列包含 id 列的散列

标签 php mysql sql hash

我有一个包含 1 列 id 的表。现在我想为我的表创建一个新列,所以我希望新列的数据被散列为 id。像这样:

// my table
+------+
|  id  |
+------+
|  1   |
|  2   |
|  3   |
+------+

// I want this table
+------+------------+
|  id  |   hashed   |
+------+------------+
|  1   |  00320032  |
|  2   |  00330033  |
|  3   |  00340034  |
+------+------------+

需要注意的是,hashed列是基于:

散列('adler32', '1');//输出:00320032

散列('adler32', '2');//输出:00330033

散列('adler32', '3');//输出:00340034

现在,我可以这样做吗?

最佳答案

在其他可能的方法中,您可以首先获取所有的 id,为它们中的每一个计算散列值,然后将数据重新插入到表中(并避免重复 :)

以下是有趣的(没有进行错误检查:)

<?php
// Adding the column named 'hashed'
$mysqli->query('ALTER TABLE your_table ADD COLUMN (`hashed` INT);');

// Retrieving all the 'id's
$result = $mysqli->query('SELECT id FROM your_table;');
$IDs = $result->fetch_all(MYSQLI_ASSOC);
$result->close();

// Assembling the values for a bulk INSERT statement
$values = array();
foreach($IDs as $row) {
    $ID = $row['id'];
    $hashed = hash('adler32', $ID);
    $values[] = "($ID, $hashed)";
}
$values = implode(',', $values);

// Delete to avoid duplicates
$mysqli->query("DELETE FROM your_table;");

// Insert the 'id's and their respective hashed values
$mysqli->query("INSERT INTO your_table (id, hashed) VALUES $values;");

关于php - 如何创建一个新列包含 id 列的散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31397091/

相关文章:

mysql 获取元数据信息——用户创建、用户查询、用户组和数据库大小

php - 小型网站的身份验证,例如?

php - 为什么该数组元素的值解析为零?

php - .htaccess 内部重定向不适用于字符串参数

mysql - 删除mysql中的重复记录

用于正确连接的 MySQL 字符串操作

mysql - 数据库设计和数据库表之间的连接操作

sql - 在 SQL 中,如何将一个数字乘以一个数组

PHP POST 不工作

MySQL 获取索引