1.在生成页面前先取得文章的最大ID并+1,然后写入页面,再写入数据库。这样做可能会出现 最大ID+1 相等,所以你最好写入前又要select 数据库一次。建议方法:(FYI)
用auto_increment字段,先向数据库中插入一条空记录,用mysql_insert_id() 这个函数取得返回的ID值。再用这个作为文章的文件名。

解决方案 »

  1.   

    to Jzealot(困学老二)
    先把文章写入数据库,然后再得到当前文章的ID, 如果先写入数据库就不知道页面的路径。to  coolstr(大只佬) 
    最大id+1相等? 这是不可能的,文章的id是auto_increment字段,怎么可能重复呢?
      

  2.   

    最大id+1肯定不行,时间也不行。都会有并发冲突其实静态页面的路径在插入数据库之前是可以算出来的,除非你在其中一定要加上自增字段,这样就要再select一次last_inserted_id
      

  3.   

    现在想在生成静态页面时将文章在数据库的ID写入页面中,以便评论时使用,有必要将id写入页面吗?评论不是动态的吗如果取得上次操作的id,在插入操作完成后,可以用mysql_insert_id ()可以得到上次insert 操作后的id
      

  4.   

    是否使用auto_increment字段与你的问题并无直接关系。当使用auto_increment字段时,对保证文章编号的唯一性要容易一点。“本来文章添加时是先生成静态页面,然后再将页面的路径连同文章信息一起写入数据库,
    现在想在生成静态页面时将文章在数据库的ID写入页面中,以便评论时使用”
    此时保证唯一性的标志实际上是含路径的文件名,因此在评论时只需根据这个就可以识别了,并不需要附加其他的识别标志。
      

  5.   

    如果先写入数据库就不知道页面的路径?
    怎么会呢,你可以这样做三,含路径的文件名(注:只是文件名字)先生成,写入数据库后,再得到id,
    最后才根据先前产生的文件名来生成真正的文件
    我就是这样做的,不过还是要select一次另外,含路径的文件名是唯一的,还可以根据唠叨大哥说的做
      

  6.   

    我是根据含路径的文件名来select的,
    好像有点多此一举
      

  7.   

    生成二次肯定是不可取的.按老大的说法应该可以,也就是说在评论表中以路径做为PK字段,
    不过路径名一般会很长,看着不太舒服。to cloudchen
    最大id+1肯定不行,时间也不行。都会有并发冲突
    其实静态页面的路径在插入数据库之前是可以算出来的,
    路径是可以算出来,如果用时间也会产生并发问题,那么应该用什么来做?
      

  8.   

    既然文章id已经存如数据库了添加,显示评论的时候当然从数据库里,查找文章id不知道,你究竟要做什么?
      

  9.   

    对了。
    我想用 使用md5处理后的页面路径的32位字符串 做为pk字段,
    不知道这个会不会发生重复?
      

  10.   

    “我想用 使用md5处理后的页面路径的32位字符串 做为pk字段”
    1、没有这个必要,因为是不可逆的。反而还要增加组装校验的开销
    2、重复的概率极小,但必然是存在的
      

  11.   

    如果你的文件名是有规率的,rewrite一下不就好看了吗
      

  12.   

    我是按照2楼方法作的,先插入数据库,按照时间,id得到路径,然后生成静态文件,效率还可以演示:www.phpabc.com
      

  13.   

    TO:"先把文章写入数据库,然后再得到当前文章的ID, 如果先写入数据库就不知道页面的路径。"怎么不会不知道页面的路径呢?
    1、你可以先定一下生成静态页面的规则.2、你可以在生成一个静态页面时,保存页面的路径(刚操作完,就不知道路径的话,就狂晕)
    然后再UPDATE一下那条记录就行。
      

  14.   

    感觉用datetime(或timestamp)做作为文件名与PK的方法不错!