php – 在mysql中排成一行

前端之家收集整理的这篇文章主要介绍了php – 在mysql中排成一行前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

我现在正在这样做的方法是在保存和比较它之前读取对应于用户的行,通过变量变量来查找已更改的数据,但我发现它很慢,我想知道是否有更聪明的方法来做到这一点,也许在mySQL查询里面(可能使用临时表?)或者使用一些我不知道的PHP MysqL函数

我希望你对我有一些想法.

(我检查了这个问题:https://stackoverflow.com/questions/218499/mysql-diff-tool,但结果与我想要的有很多不同)

提前致谢!

最佳答案
您可以使用PHP中的array_diff_assoc()函数执行此操作.

这里我们在PHP数组中有两行数据.

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

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

编辑

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

  1. Prefs
  2. ----------------------------------------------
  3. UserID TransactionID Name Value
  4. ----------------------------------------------
  5. 1 1 Font Sans Serif
  6. 1 1 Color Red
  7. 1 1 Height 100
  8. 1 1 Width 400
  9. 1 2 Font Verdana
  10. 1 2 Color Red
  11. 1 2 Height 100
  12. 1 2 Indent 50

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

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

如果我的逻辑是正确的,应该屈服:

  1. ----------------------------------------------
  2. UserID TransactionID Name Value
  3. ----------------------------------------------
  4. 1 2 Font Verdana
  5. 1 2 Indent 50

猜你在找的MySQL相关文章