两张或多张表联合查询问题

yybjroam05 2013-06-03 10:52:26
现在我遇到一个非常麻烦的问题:

问题:现在有三张表,现在要求对三张表按时间来排序,比如表A中取3条,表B中再取3条,
表c再取3条
一次一共取9条,
如果表b或表a或表c不足3条的,其它表就多取不足的条数。

也就是说多张表一起来实现翻页功能.


...全文
156 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2013-06-03
  • 打赏
  • 举报
回复
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
yybjroam05 2013-06-03
  • 打赏
  • 举报
回复
另外,表a表b表c的数据结构是不一样的
yybjroam05 2013-06-03
  • 打赏
  • 举报
回复
这个问题可以抽象成: 在php里实现: 1、计算机每个表的总记录条数. 就有如下的数组:

$aa=array(
   "表1"=>20,
   "表2"=>2,
   "表3"=>0
);
2、每次一共取9条,那么每个平均下来就取3条(假设三张表,每张表里的记录数随机) 第一次取,表1取7条,表2取2条,表3取0条. 第二次取,表一接着上一次取了的再取9条. ...... 这个算法我不知道怎么实现
ACMAIN_CHM 2013-06-03
  • 打赏
  • 举报
回复
按下面思路实现。 但效率极差。 select * from ( (select *, (select count(*) from a where 时间>=t.时间 ) as K from A t) union all (select *, (select count(*) from a where 时间>=t.时间 ) as K from B t) union all (select *, (select count(*) from a where 时间>=t.时间 ) as K from C t) ) v order by k limit 9
WWWWA 2013-06-03
  • 打赏
  • 举报
回复
假如c表没有记录,那么由A表和b表来取或A表足够的话也可以把c表的数量再取出来. c表没有记录,怎么取?
yybjroam05 2013-06-03
  • 打赏
  • 举报
回复
假如c表没有记录,那么由A表和b表来取或A表足够的话也可以把c表的数量再取出来. 我昨天也试过union all 我再试一下.
rucypli 2013-06-03
  • 打赏
  • 举报
回复
select * from A order by time desc limit 3 union all select * from B order by time desc limit 3 union all select * from C order by time desc limit 3 表里面连三条数据都没有 这得什么表啊
WWWWA 2013-06-03
  • 打赏
  • 举报
回复
如果表b或表a或表c不足3条的,其它表就多取不足的条数。 举例说明,假设C表没有记录,A、B表各取多少?只取A、还是B表记录 ?
yybjroam05 2013-06-03
  • 打赏
  • 举报
回复
已经解决,不过查询效率很缓慢,主要是union all方式 。只有以后数据量大时有时间来优化了.
yybjroam05 2013-06-03
  • 打赏
  • 举报
回复
感谢,你提供的union all思路是对的,我正在实现.

56,677

社区成员

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

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