php– 在mysql中排成一行

php– 在mysql中排成一行,第1张

概述我想知道是否有一种简单的方法来比较几行MySQL数据.特别是,我所拥有的是一个包含每个用户的设置值列表的表.用户可以毫无问题地在gui中修改这些设置.现在,我要做的是:每当用户保存新数据时,我想找到旧数据和待保存数据之间的差异,以找出哪些列已更改,然后保存到日志中. .我现在正在这样做的方法是在保存和比较它之前读取对应于用户的行,通过变量变量来查找已更改的数

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

特别是,我所拥有的是一个包含每个用户的设置值列表的表.

用户可以毫无问题地在gui中修改这些设置.

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

我现在正在这样做的方法是在保存和比较它之前读取对应于用户的行,通过变量变量来查找已更改的数据,但我发现它很慢,我想知道是否有更聪明的方法来做到这一点,也许在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 serif1        1               color      Red1        1               Height     1001        1               WIDth      4001        2               Font       Verdana1        2               color      Red1        2               Height     1001        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       Verdana1        2               Indent     50
总结

以上是内存溢出为你收集整理的php – 在mysql中排成一行全部内容,希望文章能够帮你解决php – 在mysql中排成一行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1167727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存