求个sql问题 问个sql的问题这样的表结构id reply1 02 03 04 15 3 我能不能把结果查出来并且是1 4 2 3 5 让reply和id相同的内容排在相应id的后面 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我看懂你的需求了,如果replay = 上一记录的id, 就把这条记录接到id的后面,但不知道怎么写,想一下 这种SQL语句很难实现的吧?!如果你要实现“第四条是对第一条的回复,第五条是对第三第的回复”,可以这样操作:先读取replay=0所有的数据,然后foreach循环,读取每个ID是否有回复,有则插入数组作为要输出的数据,没有则跳出继续。 这个何必要用sql去折腾呢.其实就是mysql怎么做无限分类的树型排版你只出了两层的例子,无限多层呢?一条搞不定的,要做估计只能上存储过程了.你实际上把业务端的东西扔sql层去考虑了.用php处理吧. 回楼上,是无限多层。可我要限制总体条数的,看这个http://bj.bbs.house.sina.com.cn/tree-28609-1.html如果用php处理,怎么限条数呢?给个思路吧 这个用PHP可以做到的啊,当你用函数计算数组里数据的个数达到总条数的时候,结束循环啊! 还要分页啊,你看下这http://bj.bbs.house.sina.com.cn/tree-28609-1.html要有那么容易我也不来这问了 建议到mysql版去发一个贴,记得以前有过一个这种需求的帖子,找不到了。 mysql> select * from t_dld11111;+------+-------+| id | reply |+------+-------+| 1 | 0 || 2 | 0 || 3 | 0 || 4 | 1 || 5 | 3 |+------+-------+5 rows in set (0.00 sec)mysql> select id -> from t_dld11111 -> order by if(reply>0,reply,id),id;+------+| id |+------+| 1 || 4 || 2 || 3 || 5 |+------+5 rows in set (0.00 sec)mysql> mysql> select GROUP_CONCAT(id ORDER BY if(reply>0,reply,id),id SEPARATOR ' ') -> from t_dld11111;+-----------------------------------------------------------------+| GROUP_CONCAT(id ORDER BY if(reply>0,reply,id),id SEPARATOR ' ') |+-----------------------------------------------------------------+| 1 4 2 3 5 |+-----------------------------------------------------------------+1 row in set (0.00 sec)mysql> 这个语句不错,,学习了.不过实际应用有两点不足1是语句本身的效率问题,order by if(...)意味着无法使用索引了.2是lz后来提的分页问题. 当然mysql树型排版也不存在什么索引问题了,当我没说.剩下就是分页了. 1.分表就简单很多,而且是比较通用的做法.或者加个字段存储主贴的id,不管多少层的回复都存主贴的id2.还可以把数据都存php数组,利用数组分页----这个是下下等方案. 一个PHP基础问题 求助一个问题:怎样把自己宿舍的电脑搭建成服务器,外网可以访问? 中文名字的图片上传错误怎么办? 关于 仿微博 高手来 大虾帮帮忙~~在VISTA中,如何配置PHP环境啊? sql查询的一个问题 问一下这个header的出错信息 php中咋样把字符串转化为asc码 PHP 4.2.0 Session失效的奇怪问题? 如何用php将数据库中存储的网址显示在页面上,并且还是一个链接? zend studio 单机 debug 项目 失败。 小妹请教PHP里执行MySql存储过程问题!
其实就是mysql怎么做无限分类的树型排版你只出了两层的例子,无限多层呢?一条搞不定的,要做估计只能上存储过程了.
你实际上把业务端的东西扔sql层去考虑了.
用php处理吧.
如果用php处理,怎么限条数呢?给个思路吧
+------+-------+
| id | reply |
+------+-------+
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 1 |
| 5 | 3 |
+------+-------+
5 rows in set (0.00 sec)mysql> select id
-> from t_dld11111
-> order by if(reply>0,reply,id),id;
+------+
| id |
+------+
| 1 |
| 4 |
| 2 |
| 3 |
| 5 |
+------+
5 rows in set (0.00 sec)mysql>
-> from t_dld11111;
+-----------------------------------------------------------------+
| GROUP_CONCAT(id ORDER BY if(reply>0,reply,id),id SEPARATOR ' ') |
+-----------------------------------------------------------------+
| 1 4 2 3 5 |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)mysql>
1是语句本身的效率问题,order by if(...)意味着无法使用索引了.
2是lz后来提的分页问题.
剩下就是分页了.
2.还可以把数据都存php数组,利用数组分页----这个是下下等方案.