mysql 下级分类 排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 下级分类 排序相关的知识,希望对你有一定的参考价值。

mysql数据库中,idpath字段中,字符串类型,值如下
idpath
0-1
0-1
0-15
0-2
0-3
sql = SELECT idpath FROM $this->tabName ORDER BY idpath ASC
排序出来就是这种结果,我需要0-15排在0-3的后面,请问该怎么做?

select name,desc,count(desc) as c from tmp_table group by name,desc order by c desc limit 9;
把name放在前面就是优先给name排序,name一样的就按后面的desc排序。
这个句子就能满足你的要求。
3.以count(desc)的多少排列name;
不知道这句话什么意思。不过对你想要的结果没有什么影响。

另外,列名不要用desc。desc 是数据库中的一个关键字。原则上最好不要用来做列名。
------------------------补充-----------------------

满足你的第三个条件也很容易,
group by name,desc 变成
group by name,count(desc)就可以了
参考技术A MYSQL排序原理是按每位数字的大小排序,最好就是在你创建的每个分内中添加上一个时间之类的字段,这样你可以按照创建的时间来排序了,也便于你修改,得到你想要的排序

单纯MYSQL递归查询上下级关系

查询 id = 6 的所有父级

SELECT ID.level, DATA.* FROM( 
SELECT 
@id as _id, 
( SELECT @id := parent_id 
FROM table1 
WHERE id = @id 
) as _pid, 
@l := @l+1 as level 
FROM table1, 
(SELECT @id := 6, @l := 0 ) b 
WHERE @id > 0 
) ID, table1 DATA 
WHERE ID._id = DATA.id 
ORDER BY level;

根据这个父级查询方法,很容易可以写出查所有子级的,下面的查询 id=3 的所有子级
SELECT ID.level, DATA.* FROM( 
SELECT 
@ids as _ids, 
( SELECT @ids := GROUP_CONCAT(id) 
FROM table1 
WHERE FIND_IN_SET(parent_id, @ids) 
) as cids, 
@l := @l+1 as level 
FROM table1, 
(SELECT @ids :=3, @l := 0 ) b 
WHERE @ids IS NOT NULL 
) id, table1 DATA 
WHERE FIND_IN_SET(DATA.id, ID._ids) 
ORDER BY level, id

以上是关于mysql 下级分类 排序的主要内容,如果未能解决你的问题,请参考以下文章

mysql 查询时 按照某个字段计算后的值 排序?

浅谈ORDER BY分类

MySQL 条件排序

MySql 字段排序

带你玩转JavaWeb开发之六-mysql基本语法详解及实例

2018.11.29_MySQL约束_总结