php - 管理主题编辑并发的最佳方式

标签 php mysql concurrency

我的网站(用 PHP 和 MySql 编写)中有一些用户可以编辑的数据。

如您所知,如果 用户 A 打开编辑框,而在编辑过程中另一个 用户 B 打开相同的编辑框,其中一个用户将失去他的修订(第一个完成的)。

所以我为第一个尝试编辑的用户实现了一种访问时间(20 分钟)。这是代码:

$dateBlock=date("Y-m-d H:i:s");
$update=mysql_query("UPDATE tracklist SET block_user='".$_SESSION['nickname']."', block_date='".$dateBlock."' WHERE 
(trackid='".$_GET['trackid']."' AND block_user='') or 
(trackid='".$_GET['trackid']."' AND block_user='".$_SESSION['nickname']."') or 
(trackid='".$_GET['trackid']."' AND block_date<SUBTIME('".$dateBlock."', '0:20'))",$mydb);
$updatedRows=mysql_affected_rows();
if($updatedRows==0) $messaggio="Sorry but another User is editing this tracklist";

但是我不太喜欢这种方式。

你能给我什么建议?例如,stackoverflow 上的方法是什么?

最佳答案

您必须在两个选项中做出选择:

  • 正如一个答案所建议的那样:在提交之前锁定文本框,特此排除其他任何人可以在该时间编辑它

  • 按照其他用户的建议跟踪不同的版本,而不是总是更新内容,总是添加带有指示版本的字段的新内容,这样人们就可以看到不同的内容版本,或者如果您想更快地完成,只需跟踪提交时间,而不是您可以轻松地按提交时间对结果进行排序

    您还可以提供的一项增强功能是,通过将版本/提交时间与他下载的帖子进行比较,在他想要发送编辑的那一刻通知用户自从他打开帖子以来该帖子已经更新。然后他可以选择先查看它并整合更改。

  • 关于php - 管理主题编辑并发的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5804040/

    相关文章:

    mysql - 查看两个表之间所有可能的组合

    mysql - 从表中检索浮点值

    java - 受 Quartz DisallowConcurrentExecution 影响的作业会发生什么

    php - SQL : Select last 15 records from mysql grouped rows

    php - 我有这段代码,它工作正常,但我想将 having 代码更改为另一个结构

    php - 共享主机上的 Laravel - 子域

    php - 如何自动更新phpmyadmin中的列

    mysql 如何将多行连接到一行

    java - ConcurrentMap.remove() 是否在 get() 返回 null 之前提供先行边?

    java - 寻找带有仿函数的并发映射