在阅读了很多关于保持页面更改历史记录或如何版本控制数据库中的记录(例如)的SO问题之后,我找不到真正优雅的解决方案来完成工作.
现在,让我们尝试尽可能清楚地解释我们需要什么,对于这个简单的修订系统,允许注册用户发布一些文章,其他用户提交那些文章的修订版,然后一些版主用户检查那些修订版.
MySQL数据库
该数据库包含一个文章表,其中包含以下简化字段:
ARTICLE(id, id_user, title, content, date);
Run Code Online (Sandbox Code Playgroud)
要实现修订/历史版本,我想我们将有下表:
REVISION(id, id_article, revision_id_user, id_moderator, revision_date,
revision_title, revision_content, revision_description, revision_check);
Run Code Online (Sandbox Code Playgroud)
与关系: ARTICLE 0,n <---> 1,1 REVISION
工作流程
用户创建一个ARTICLE,它被插入ARTICLE表中(太棒了!)
另一个用户对此进行了更新ARTICLE,此更新记录在REVISION表中,并为主持人用户排队.(revision_check=0).
主持人用户验证REVISION(revision_check=1),然后ARTICLE(content)获取REVISION(revision_content)值.
我的问题
这个工作流程似乎是一个很好的方法吗?因为,我看到一个错误:如果有几个REVISIONs ARTICLE:
REVISION还是原始内容ARTICLE?REVISION在未检查最后一个时,不能提交其他内容.有没有办法记录轻型版本?那么,是否可以REVISION通过SQL,PHP或js比较函数在表中插入更新的内容?如何像SO一样显示它呢?因为我担心REVISION桌子会很重.
额外奖励:怎么样?
任何想法,链接,源代码,插件(MySQL,PHP 5和JS/Jquery)都会受到极大关注.
我有一个标签和一些功能在点击它时运行.
但是当一个click事件发生时,双击事件就完成了,然后我的函数运行了2次......
你可以在这里看到一个轻松的例子
HTML:
<label>
<input type="checkbox" id="checkbox"> Click here
</label>
<input type="text" id="test" value="0"/> clicks???
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
$(document).ready(function(){
$('label').click(function(event) {
$('#test').val(parseInt($('#test').val())+1);
event.preventdefault();
});
});?
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题呢 ?
编辑
preventdefault()以preventDefault()固定的双击,但现在复选框不再检查...
我已经做了大量关于缓存文件中数据的搜索(serialize/unserialise vs json_encode/decode,var_export,igbonary)和mysql查询(优化,存储过程,查询缓存),但此时此刻,我想知道更好的方法是什么优化具体案例,如下所示.
提前抱歉:我想这是一个很长的话题,但是有必要了解这个项目.请原谅我糟糕的英语,这不是我的第一语言.
让我们假设我们有这种数据库关系.

数据库的描述(括号中估计的记录数):
所以我们有几个关系,每个都是ITEM创建/更新的记录器.
我已经使用以下示例在文件夹和文件中缓存了ITEM数据:
public function cacheItem()
{
$req=mysql_query("SELECT id, title, content, id_mod, id_cat
FROM ITEM
WHERE ITEM.id='".$this->id."'")or die(mysql_error());
if(mysql_num_rows($req)==1)
{
$this->itemData=mysql_fetch_array($req);
$this->folder=floor($this->id/1000);//1000 items max per folder
$this->itemUrl=$this->folder."/".$this->id.".txt";
if(!file_exists($this->itemUrl))
{
touch($this->itemUrl);
}
file_put_contents($this->itemUrl,serialize($this->itemData),LOCK_EX);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了它们unserialize(file_get_contents($url)),这部分就像一个魅力!
现在我希望优化ITEM列表以通过几个选项(例如)显示它们,foreach显示每个分页限制为100:
我已经知道如何在SQL中执行此操作并将结果放在缓存树中.
使用这些缓存文件的问题是,当创建/更新新的ITEM时,可能必须以非常严格的方式刷新列表.
第一个问题:
那么,如果同时创建/更新ITEM(那些列表也是如此)会发生什么?
是否LOCK_EX的 …
当我阅读这个答案时,我想是否可以插入和更新ENUM一行的多个“检查”值,使用MySQL.
实体示例:
TABLE
id INT auto_increment
day_list ENUM ('1','2','3,'4','5,'6','7')
gender ENUM ('m','f')
Run Code Online (Sandbox Code Playgroud)
我尝试了以下操作(以指定检查周末和两个性别):
INSERT INTO TABLE (day_list,gender) VALUE ('{6,7}','{m,f}')
Run Code Online (Sandbox Code Playgroud)
它不返回任何错误,并正确插入记录,但 day_list 和性别字段为空。
所以,它似乎不适用于 mySQL。而且在 phpMyAdmin (3.2.0) 中似乎不可能,因为值是通过单选按钮(而不是复选框)检查的。
关于如何使它工作的任何想法?或者另一种解决方案来记录和选择那些没有LIKE请求且没有关联实体(如 TABLE_DAYS 和 TABLE_GENDER)的检查天数?