求最优的sql,尽量少次的数据库交互

lazydot 2006-02-21 11:02:46
情况是这样,表a是分类表:其中保存分类id和分类名称.
表b是条目表:其中有条目id,所属分类id(即a的id外键),条目名称
现在要查询b中对应a中前5个分类中每个分类的前5个条目记录.
也就是25条记录(也可能不足25条,因为有的分类可能不足5个条目)
求最优的sql语句,可以是多次交互,不过尽量少次的
前面发过一个贴不过找不到了...
...全文
141 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lazydot 2006-02-27
  • 打赏
  • 举报
回复
搞定了,十分感谢:XqYuan() !!!!!!
XqYuan 2006-02-25
  • 打赏
  • 举报
回复
那可以
left(group_concat(tb.id order by tb.value separator ','),***)
XqYuan 2006-02-24
  • 打赏
  • 举报
回复
好像没法取前几个,不能用limit

还有就是用临时表,不知道在数据量大的时候哪个好一些
lazydot 2006-02-24
  • 打赏
  • 举报
回复
我想的是有没有办法可以限制group_concat取得字符串的长度?或者可以截断也行啊
lazydot 2006-02-22
  • 打赏
  • 举报
回复
现在还有个问题:
我想让tbid和tbvalue两列只显示前5条记录,这个应该怎么实现呢?
lazydot 2006-02-22
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/TopicView3.asp?id=4200633
查到了这个帖子,果然可以,哈哈,谢谢

mysql> create table tb(id char(2),aid char(2),value char(2));
Query OK, 0 rows affected (0.08 sec)

mysql> insert into ta value('00','0a'),('01','0b'),('02','0c'),('03','0d');
Query OK, 4 rows affected (0.03 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> insert into tb value('b0','00','b0'),('b1','00','b1'),('b2','01','b2'),('
b3','03','b3'),('b4','03','b4');
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> select ta.id,ta.name,group_concat(tb.id order by tb.value separator ',')
as tbid,
-> group_concat(tb.value order by tb.value separator ',') as tbvalue from ta
,tb where tb.aid=
-> ta.id group by ta.id;
+------+------+-------+---------+
| id | name | tbid | tbvalue |
+------+------+-------+---------+
| 00 | 0a | b0,b1 | b0,b1 |
| 01 | 0b | b2 | b2 |
| 03 | 0d | b3,b4 | b3,b4 |
+------+------+-------+---------+
3 rows in set (0.00 sec)

mysql>
lazydot 2006-02-22
  • 打赏
  • 举报
回复
谁来帮我解决这个问题啊,我好结贴散分啊~~~~
XqYuan 2006-02-22
  • 打赏
  • 举报
回复
用GROUP_CONCAT()试试,如果不行用临时表

56,937

社区成员

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

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