php怎么实现一定时间内帖子置顶?

逍遥法王 2009-08-27 11:34:09
注意是要一定时间内帖子置顶
我原先的思路是这样的:
"SELECT * FROM `table` WHERE pub_time > ".time()." ORDER BY istop DESC,pub_time desc"

但是这样的话,当pub_time>time()时,即过期后还是按照istop排序导致过期了的置顶帖子还是排在最顶端。。。

有没有解决办法?
...全文
366 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿_布 2009-08-30
  • 打赏
  • 举报
回复
上面就是一条语句啊!上面一条语句就可以把你想要的数据查询出来。
逍遥法王 2009-08-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhoupuyue 的回复:]
不知道你的表结构是怎样的,我想到了一点思路。
先查出置顶并且没过期的帖子,再查出没有置顶和已经过期的置顶帖子。
语句大概是这样:
SQL codeselect*from'table'where istop>0and pubtime>time()orderby istopdesc,pubtimedescunionallselect*from'table'where istop<0orderby pubtimedesc
不知道你的置顶帖子和不置顶的帖子是怎么区分的?istop>0或者istop<0是区分是否置顶帖子。

[/Quote]
就是这个意思,先查出置顶并且没过期的帖子,再查出没有置顶和已经过期的置顶帖子,必须写两个查询语句吗?
因为涉及到分页问题,能不能给个详细点的语句
逍遥法王 2009-08-30
  • 打赏
  • 举报
回复
istop>0表示置顶
istop<0表示不置顶
pubtime > time()表示已过期置顶,(注意是置顶的属性已过期,但仍需要在列表中显示出来,只是不排在最顶端)
a8222777 2009-08-30
  • 打赏
  • 举报
回复
学习
axolo 2009-08-30
  • 打赏
  • 举报
回复

SELECT *
FROM `table`
WHERE pub_time < ".time()."
ORDER BY istop DESC, pub_time DESC
tony-杨 2009-08-30
  • 打赏
  • 举报
回复
嘿嘿,写反了,应该是
Update table set pub_time = NULL where UNIX_TIMESTAMP() > pub_time;
SELECT * FROM `table` ORDER BY pub_time desc,istop DESC;
tony-杨 2009-08-30
  • 打赏
  • 举报
回复
最简单的办法,先把过期的清除掉标记,再查询

Update table set pub_time = NULL where pub_time > UNIX_TIMESTAMP();
SELECT * FROM `table` ORDER BY pub_time desc,istop DESC;
qq550612330 2009-08-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pjpsteven 的回复:]
pub_time 是指置顶过期的时间(置顶过期以后仍要在列表中显示,因为帖子本身没有过期,是置顶的属性过期)
[/Quote]
假设table里有一个'type'字段,布尔型,作为置顶属性,为置顶帖设为1,非置顶帖设为0,那么sql语句可以写成
"SELECT * FROM `table` WHERE pub_time > ".time()."and type=1 ORDER BY istop DESC,pub_time desc"

LZ的置顶属性如果是其他表里的话那就得用嵌套查询了。
webztdh 2009-08-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq550612330 的回复:]
引用 2 楼 pjpsteven 的回复:
pub_time 是指置顶过期的时间(置顶过期以后仍要在列表中显示,因为帖子本身没有过期,是置顶的属性过期)

假设table里有一个'type'字段,布尔型,作为置顶属性,为置顶帖设为1,非置顶帖设为0,那么sql语句可以写成
"SELECT * FROM `table` WHERE pub_time > ".time()."and type=1 ORDER BY istop DESC,pub_time desc"

LZ的置顶属性如果是其他表里的话那就得用嵌套查询了。
[/Quote]
ORDER BY istop DESC 这句不就说明有置顶属性了吗?还要再加'type'字段????
支持4楼
阿_布 2009-08-29
  • 打赏
  • 举报
回复
不知道你的表结构是怎样的,我想到了一点思路。
先查出置顶并且没过期的帖子,再查出没有置顶和已经过期的置顶帖子。
语句大概是这样:

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是区分是否置顶帖子。

阿_布 2009-08-28
  • 打赏
  • 举报
回复
pub_time>time()是什么意思,你这个条件应该就可以排除掉过期的帖子啊!
phpboy 2009-08-28
  • 打赏
  • 举报
回复
"SELECT * FROM `table` WHERE pub_time > ".time()." ORDER BY istop DESC,pub_time desc"

这句只提取出了,置顶的贴子吧
tfxg 2009-08-28
  • 打赏
  • 举报
回复
"SELECT * FROM `table` WHERE pub_time > ".time()." ORDER BY istop DESC,pub_time desc"
這句如果過期了就查不出要置頂的了,有何問題呢
逍遥法王 2009-08-28
  • 打赏
  • 举报
回复
pub_time 是指置顶过期的时间(置顶过期以后仍要在列表中显示,因为帖子本身没有过期,是置顶的属性过期

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧