注意是要一定时间内帖子置顶
我原先的思路是这样的:
"SELECT * FROM `table` WHERE pub_time > ".time()." ORDER BY istop DESC,pub_time desc" 但是这样的话,当pub_time>time()时,即过期后还是按照istop排序导致过期了的置顶帖子还是排在最顶端有没有解决办法?

解决方案 »

  1.   

    pub_time>time()是什么意思,你这个条件应该就可以排除掉过期的帖子啊!
      

  2.   

    pub_time 是指置顶过期的时间(置顶过期以后仍要在列表中显示,因为帖子本身没有过期,是置顶的属性过期
      

  3.   

    "SELECT * FROM `table` WHERE pub_time > ".time()." ORDER BY istop DESC,pub_time desc" 
    這句如果過期了就查不出要置頂的了,有何問題呢
      

  4.   

    "SELECT * FROM `table` WHERE pub_time > ".time()." ORDER BY istop DESC,pub_time desc"这句只提取出了,置顶的贴子吧
      

  5.   

    假设table里有一个'type'字段,布尔型,作为置顶属性,为置顶帖设为1,非置顶帖设为0,那么sql语句可以写成
    "SELECT * FROM `table` WHERE pub_time > ".time()."and type=1 ORDER BY istop DESC,pub_time desc"LZ的置顶属性如果是其他表里的话那就得用嵌套查询了。
      

  6.   

    ORDER BY istop DESC 这句不就说明有置顶属性了吗?还要再加'type'字段????
    支持4楼
      

  7.   

    不知道你的表结构是怎样的,我想到了一点思路。
    先查出置顶并且没过期的帖子,再查出没有置顶和已经过期的置顶帖子。
    语句大概是这样:select * from 'table' where istop>0 and pubtime>time() order by istop desc,pubtime desc
    union all
    select * from 'table' where istop<0 order by pubtime desc
    不知道你的置顶帖子和不置顶的帖子是怎么区分的?istop>0或者istop<0是区分是否置顶帖子。
      

  8.   

    istop>0表示置顶
    istop<0表示不置顶
    pubtime > time()表示已过期置顶,(注意是置顶的属性已过期,但仍需要在列表中显示出来,只是不排在最顶端)
      

  9.   


    SELECT *
    FROM `table` 
    WHERE pub_time < ".time()." 
    ORDER BY istop DESC, pub_time DESC
      

  10.   

    最简单的办法,先把过期的清除掉标记,再查询Update table set pub_time = NULL where pub_time > UNIX_TIMESTAMP();
    SELECT * FROM `table` ORDER BY pub_time desc,istop DESC;
      

  11.   

    嘿嘿,写反了,应该是
    Update table set pub_time = NULL where UNIX_TIMESTAMP() > pub_time;
    SELECT * FROM `table` ORDER BY pub_time desc,istop DESC;