gpt4 book ai didi

mysql - 如何使用元素和子元素对表格进行排序

转载 作者:行者123 更新时间:2023-11-29 14:01:08 25 4
gpt4 key购买 nike

我有一个与此类似的 MySQL 表:

ID    elementName  subElementOfID

1 1
2 2
3 4
4 5
5 9
6 3
7 6
8 7
9 71 8
10 8
11 10
12 72 8
13 73 8

元素不一定是数字,但可以是 varchar。 “subElementOfID”列表示该元素(例如“71”)是 ID 为 X 的元素的子元素。在此示例中,ID 为 9、12 和 13 的元素是 ID 为 8 的元素的子元素。

目标:

按数字或字母数字顺序(这取决于但并不重要)对该表进行排序,并将标记为子元素的元素直接排序在其父元素下。在这种情况下,按数字顺序排序的 SELECT 输出应如下所示:

ID    elementName  subElementOfID

1 1
2 2
6 3
3 4
4 5
7 6
8 7
9 71 8
12 72 8
13 73 8
10 8
5 9
11 10

稍后在 PHP 中处理输出。但我更愿意不使用 PHP 解决方案,而是使用 SQL-Select,它可以按正确的顺序提供表格。

非常感谢任何帮助或建议。

由于这是我的第一个 Stackoverflow 问题,我希望我已收集了所有重要事实并准备提供更多信息:-)

拉尔夫

<小时/>

我找到了一个涉及自连接和联合的解决方案。这可能过于复杂,我非常希望有一个更简单的 SELECT。

SELECT ID, element FROM 
((SELECT t1.ID, t1.elementName as element, t2.elementName AS element2, t1.subElementOfID
FROM test t1
LEFT JOIN test t2 ON t2.ID = t1.subElementOfID
WHERE t1.subElementOfID IS NOT NULL)

UNION

(SELECT ID, elementName AS element, elementName AS element2, subElementOfID FROM test
WHERE subElementOfID IS NULL)

ORDER BY element2, subElementOfID, element) tu
<小时/>

用户 xpda(感谢您的输入!)建议通过字符串连接进行排序。我认为这实际上是一个好主意,如果 elementName 列实际上包含名称而不是数字,因为我并不完全满足于数字的字母数字排序。在现实生活中,我的这一列中有整数,但可能会说服我的老板使用口头名称而不是数字。尝试根据我对 xpda 答案的理解编写 SQL 表达式:

SELECT t1.ID, t1.elementName, t1.subElementOfID AS parentName
FROM test2 t1
LEFT JOIN test2 t2 ON t1.subElementOfID=t2.ID
ORDER BY IF(ISNULL(t2.elementName), t1.elementName, CONCAT(CAST(t2.elementName AS CHAR), CAST(t1.elementName AS CHAR)));

因此所有子元素都在其父元素下排序,但“10”自然在 1 和 2 之间...

还有什么建议吗?

最佳答案

您可以对两列(第二列 + 第一列)的串联进行排序(排序依据)。您可能需要先转换为字符串。

关于mysql - 如何使用元素和子元素对表格进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15040931/

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