本帖最后由 dancer3319 于 2011-10-19 16:37:02 编辑

解决方案 »

  1.   

    你不是有置顶的起始时间么?转换成时间戳然后跟需要置顶几天的时间戳做做个比较就可以了。在时间戳内的显示,不在的不显示。不用纠结在SQL上,让PHP来完成。
      

  2.   

    分开最简单了。单独取置顶的。只加一个字段就行了。就是置顶过期时间。查置顶的信息时候 WHERE top_time > now()
      

  3.   

    select * from news order by istop and DATE_ADD(topdate,INTERVAL topday DAY)<=now(), news_date desc
      

  4.   

    第一次看到如此强大的order by。
      

  5.   


    偶也是第一次见过如此强捍之order
      

  6.   

    第一次见如此强悍之orderwhere ( (addtime+3600*24*3)>unix_timestamp() and is_top=1 ) or 1=1 order by is_top,addtime
      

  7.   

    学到了个新的函数DATE_ADD(date,INTERVAL expr type)
      

  8.   


    问题已经完美解决,谢谢大家。谢谢4楼的xuzuning,让我学到了一个好用的函数DATE_ADD;我把实际应用时碰到问题说一下,算作个补充吧,希望能对后面遇到的朋友有帮助:DATE_ADD是个mysql的函数,用法DATE_ADD(date,INTERVAL expr type)date这个参数必须是"2011-10-20"或"2011-10-20 12:20:50"这样的时间格式,用"1319338463"这样的时间戳是不行的;
    还要记得istop 也要desc才可以。
    我的完整sql语句是:select * from newstable order by istop and DATE_ADD(topdate,INTERVAL topday DAY)>=now() desc,adddate desc其中
    istop   是否置顶int 0/1
    topday  置顶天数int
    topdate 置顶开始时间 datetime
    adddate 新闻发布时间 varchar
      

  9.   

    更正一下,前面说的"date这个参数必须是"2011-10-20"或"2011-10-20 12:20:50"这样的时间格式",好像不对,这个时间格式应该跟DATE_ADD(date,INTERVAL expr type) 里面的type有关;也许是我这里用了DAY所以不能用时间戳;用其它的只要对应了类型应该也可以的,我没有试过;说话还是严谨点好,不要误导了后人,呵呵