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的后面,请问该怎么做?
把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 下级分类 排序的主要内容,如果未能解决你的问题,请参考以下文章