【问题标题】:Versioning for MySQL Query ResultsMySQL 查询结果的版本控制
【发布时间】:2024-05-29 18:30:01
【问题描述】:

我有一个 PHP 程序,它从 MySQL 数据库上的简单 SQL 查询中的数据创建一个文件。我想在文件顶部有一种快速简便的“版本”行,可以快速检查生成的文件是否与保存的文件不同,但如果结果相同,则版本应该相同(因此,处理时的简单时间戳不会完全起作用)。我目前的想法是这样的:

$con = mysqli_connect("example.com", "abc", "123", "database");
$result = mysqli_query($con, "SELECT * FROM table");

echo "VERSION: " . some_hash_function($result);
/*
 * More stuff with $result here
 */

但我不确定那会是什么。

版本不需要任何顺序,只要可以快速有效地检查即可。

【问题讨论】:

  • 您可以简单地使用时间戳,也可以将版本保存在表格中,并在每次创建文件时增加数字。
  • 谢谢@solick。问题是,如果没有任何更改,或者更改已还原,则版本需要保持不变。我在上面进行了编辑以使其更清晰。

标签: php mysql sql mysqli


【解决方案1】:

您正在寻找CHECKSUM TABLE ...

一个例子是:

mysql> use `database`;
Database changed
mysql> CHECKSUM TABLE `table`;
+----------------+------------+
| Table          | Checksum   |
+----------------+------------+
| database.table | 2317843275 |
+----------------+------------+

然后您可以使用该数字来比较同一个表但来自另一个数据库,以确保两个表包含相同的行/列。

所以在代码中,你可以这样做:

$con = mysqli_connect("example.com", "abc", "123", "database");
$result = mysqli_query($con, "CHECKSUM TABLE `table`");

echo "VERSION: " . mysqli_fetch_row($result)[0];

【讨论】:

    【解决方案2】:

    您可以轻松使用 MD5 或 SHA1: http://php.net/manual/en/function.sha1.php

    不知道数据库中的字段是什么,这是一个简单的sn-p:

    echo "VERSION: " . sha1($result_title . $result_content);
    

    但是 mySQL 中的时间戳(正如 cmets 所建议的那样)可能会让您的事情变得更容易,并且不会提供 CPU 开销。

    【讨论】:

      最近更新 更多