mysql按某字段排序查询时,怎么样始终把某条记录放在第一个呢?

xiaopai20 2010-07-27 10:44:35
论坛首页有个“最新帖子”,就是按照发帖时间排序,取10条数据:
$sql = "SELECT t.*, f.name FROM threads t, forums f where f.fid=t.fid ORDER BY t.dateline DESC LIMIT 0, 10";
但是论坛里面有个公告帖子,希望一直显示在这10条最新贴的第一条,比如帖子的ID是10000,该怎么做呢?
...全文
880 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gates_gp 2010-08-01
  • 打赏
  • 举报
回复
我想问一下, 既然知道了贴子的ID是1000, 为什么不直接用1000去取得了呢? 事实上最新的ID是在不停的变化的, 我觉得你应当不能获得最新的ID号吧?
第二个问题,既然已经按时间顺序把最新的10条取出来了, 为什么还要去取什么最新10条的第一条? 这不都已经有了吗?
也许是我理解的不对
feixianxxx 2010-08-01
  • 打赏
  • 举报
回复
select * 
from (
(SELECT t.*, f.name,flag=0 FROM threads t, forums f where f.fid=t.fid and id=10000)
union all
(SELECT t.*, f.name ,flag=1 FROM threads t, forums f where f.fid=t.fid and id<>10000 ORDER BY t.dateline DESC LIMIT 9)
) t
order by flag,dateline desc

试试
ACMAIN_CHM 2010-07-28
  • 打赏
  • 举报
回复
$sql = "SELECT t.*, f.name FROM threads t, forums f where f.fid=t.fid ORDER BY id=10000 desc , t.dateline DESC LIMIT 0, 10";

但效率比较差。

下面这个效率上会好一些

select * from (    
(SELECT t.*, f.name FROM threads t, forums f where f.fid=t.fid id=10000)
union all
(SELECT t.*, f.name FROM threads t, forums f ORDER BY t.dateline DESC LIMIT 0, 10)
) t
order by id=10000 desc,datelineDESC LIMIT 0, 10
yfxucn 2010-07-27
  • 打赏
  • 举报
回复
轻轻地我走了正如我轻轻地来`````
shine333 2010-07-27
  • 打赏
  • 举报
回复
select .. where id = 10000
union all
select .. where id != 10000 order by ..
limit 9
shine333 2010-07-27
  • 打赏
  • 举报
回复
SELECT t.*, f.name FROM threads t, forums f where f.fid=t.fid ORDER BY (id=10000) DESC, t.dateline DESC LIMIT 0, 10
rucypli 2010-07-27
  • 打赏
  • 举报
回复
公告
union all
最新帖子

56,739

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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