小编Val*_*lky的帖子

如何为用户发布的内容创建版本控制/历史/修订系统?

在阅读了很多关于保持页面更改历史记录如何版本控制数据库中的记录(例如)的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)都会受到极大关注.

php mysql version-control compare database-versioning

11
推荐指数
1
解决办法
4721
查看次数

只需双击标签即可轻松点击

我有一个标签和一些功能在点击它时运行.

但是当一个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)
  • 当我们点击复选框时,点击计数器为+1 >>确定
  • 当我们点击标签时,点击计数器为+2 >> Nok

如何解决这个问题呢 ?

编辑

preventdefault()preventDefault()固定的双击,但现在复选框不再检查...

javascript jquery label click

10
推荐指数
1
解决办法
8437
查看次数

获取项目列表的更好方法:缓存序列化数据与数据库查询或其他?

我已经做了大量关于缓存文件中数据的搜索(serialize/unserialise vs json_encode/decode,var_export,igbonary)和mysql查询(优化,存储过程,查询缓存),但此时此刻,我想知道更好的方法是什么优化具体案例,如下所示.

提前抱歉:我想这是一个很长的话题,但是有必要了解这个项目.请原谅我糟糕的英语,这不是我的第一语言.

让我们假设我们有这种数据库关系. 在此输入图像描述

数据库的描述(括号中估计的记录数):

  • MODULE(10):是项目的类型,可以是文章,论坛主题,广告,新闻......
  • ITEM(百万):任何带有标题和一些文本的类型
  • 类别(50):项目类别(动物,政治,汽车,电脑......)
  • 标签(数十万):类别的标签(例如政治:国际,法国,巴拉克奥巴马......)
  • ITEM_TAG(outch):项目和标签关联

所以我们有几个关系,每个都是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:

  • 所有项目
  • 模块的项目
  • 类别的项目
  • CATEGORY和MODULE的项目
  • 标签的项目
  • TAG和CATEGORY的项目
  • TAG,CATEGORY和MODULE的项目

我已经知道如何在SQL中执行此操作并将结果放在缓存树中.

使用这些缓存文件的问题是,当创建/更新新的ITEM时,可能必须以非常严格的方式刷新列表.

第一个问题:

那么,如果同时创建/更新ITEM(那些列表也是如此)会发生什么?

是否LOCK_EX的 …

php mysql caching

8
推荐指数
1
解决办法
663
查看次数

如何为一行插入和更新多个枚举值?

当我阅读这个答案时,我想是否可以插入和更新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)的检查天数?

mysql sql enums

4
推荐指数
1
解决办法
6448
查看次数