gpt4 book ai didi

php - MYSQL使用ORDER By if,对子类进行排序,子类可以在两级进行排序

转载 作者:行者123 更新时间:2023-11-29 02:00:48 27 4
gpt4 key购买 nike

所以我希望修复以下查询:

SELECT * FROM `#__gdwproddise_category` 
ORDER BY IF(`parent_id`, `parent_id`, `ordering`),
`parent_id`, `ordering` asc

所以重要的MYSQL字段是:

`multicat_id` = primary key
`parent_id`
`ordering`

父类 parent_id = 0 其余 = 到父类的 multicat_id

每个唯一的 parent_id(包括 =0,所以 parent )在 ordering 字段中设置了唯一的顺序。

因此,在排序字段中,您会发现多个具有值 1、2、3 等的行(每个值在每个 parent_id

中都是唯一的)
like parent_id=0 will only have 1 row with ordering set to 1.
and parent_id=1 will only have 1 row with ordering set to 1.
etc.

我想通过 like 输出它们:

parent (ordering=1)
-child (ordering=1)
-child (ordering=2)
parent (ordering=2)
-child (ordering=1)
etc.

以下查询似乎几乎可以工作。然而, parent 并没有按 ordering 字段排序。他们似乎按主键排序。

SELECT * FROM `#__gdwproddise_category` 
ORDER BY IF(`parent_id`, `parent_id`, `multicat_id`),
`parent_id`, `ordering` asc

我张贴在顶部的第一个查询是我试图解决这个问题的推论,但那不起作用...第一个查询效果更好。至少 parent 和 child 在第一个中被分组在一起。这第二个联合国将 parent 与 child 分组。 children 似乎粘在一起。

我的查询基于以下线程的其中一个答案中给出的示例: SQL nested order by?

我找到这篇文章:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

当我使用 aLmost 的查询完全符合我的要求时,使用那篇文章中的“ltg rtg”解决方案似乎很复杂......那篇文章似乎支持无限子类别......我的系统只需要 1 级子类别。

最佳答案

因为你需要知道父级的顺序来放置一个 block 结果中正确位置的子行,你可能会有使用自连接。

下面的查询似乎给出了您想要的顺序:

SELECT C.* FROM categories AS C
LEFT JOIN categories AS P
ON P.multicat_id = C.parent_id
ORDER BY IF(P.multicat_ID, P.ordering, C.ordering),
P.ordering, C.ordering;

可以在http://www.sqlfiddle.com/#!2/ba095/1/0进行测试

关于php - MYSQL使用ORDER By if,对子类进行排序,子类可以在两级进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15255811/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com