php - 在 mysql 中连续比较

标签 php mysql diff

我想知道是否有一种简单的方法来比较几行 MySQL 数据。

特别是,我有一个表格,其中包含每个用户的设置值列表。

用户可以毫无问题地在图形用户界面中修改这些设置。

现在,我想做的是:每当用户保存新数据时,我想找出旧数据和要保存的数据之间的差异,找出更改的列,然后保存到日志...

我现在这样做的方式是在保存和比较之前读取与用户对应的行,逐个变量以查找更改的数据,但我发现它很慢,我想知道是否有更聪明的方法这,也许在 mysql 查询中(也许使用临时表?)或者通过使用一些我不知道的 php mysql 函数......

我希望你能给我一些想法。

(我检查了这个问题:https://stackoverflow.com/questions/218499/mysql-diff-tool,但事实证明这与我正在寻找的有很大不同)

提前致谢!

最佳答案

您可以使用 PHP 中的 array_diff_assoc() 函数执行此操作。

这里我们在 php 数组中有两行数据。

$newValues = array_diff_assoc($afterRow, $beforeRow);

它将返回一个数组,其中任何列值已更改或已添加。

编辑

要在 MySQL 中执行此操作,您需要以名称值对的形式使用它们,如下所示:

Prefs
----------------------------------------------
UserID   TransactionID   Name       Value
----------------------------------------------
1        1               Font       Sans Serif
1        1               Color      Red
1        1               Height     100
1        1               Width      400

1        2               Font       Verdana
1        2               Color      Red
1        2               Height     100
1        2               Indent     50

TransactionID 1 是旧行,Transaction ID 2 是新行:

SELECT * FROM Prefs new
  LEFT JOIN Prefs old
  ON new.Name = old.Name
    AND new.Value = old.Value
  WHERE UserID = 1
    AND new.TransactionID = 2
    AND old.TransactionID = 1
    AND (old.Name IS NULL OR old.Value IS NULL)

如果我的逻辑是正确的,应该产生:

----------------------------------------------
UserID   TransactionID   Name       Value
----------------------------------------------
1        2               Font       Verdana
1        2               Indent     50

关于php - 在 mysql 中连续比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8454066/

相关文章:

php - 更改CSS文件中所有图像的目录

php - jQuery 连接可排序列表,将订单保存到 MySQL

python - UTF-8 列的 SQLAlchemy 结果是 'str' 类型,为什么?

java - Java 中的差异、补丁和反向补丁

c# - 如果文件中的函数被重新排序,差异应用程序会变得疯狂

php - 检查 {{ path() }} 是否是 Symfony2 中的当前 {{ path() }}

php - 无法显示PHP错误

javascript - 隐藏菜单javascript

PHP/MySQL - 更改值时重新排序数字序列

vim - 使用 vimdiff 查看一对以上文件的差异