gpt4 book ai didi

mysql - 通过 UNION ALL 中的两个字段进行选择并在行之间排序

转载 作者:行者123 更新时间:2023-11-29 13:12:11 26 4
gpt4 key购买 nike

我有一个小问题,我有一个名为类别的 MySQL 表,如下所示:

| id | parent_id | name | position | status | ... |
| 1 | 0 | A | 1 | 1 | ... |
| 2 | 1 | A1 | 2 | 1 | ... |
| 3 | 2 | A2 | 1 | 1 | ... |
| 4 | 1 | A3 | 1 | 1 | ... |
| 5 | 0 | B | 2 | 1 | ... |

基本上是一个包含多级深度的所有类别的表,作为子类别的每个类别都有一个 parent_id > 0。在任何给定时间,我都使用以下 SQL 语句来仅选择具有 parent_id = 0 的顶级类别及其具有 Parent_id = id 的类别(parent_id = 0)的第一级子级。

SELECT * FROM categories WHERE parent_id = 0 UNION ALL SELECT c.* FROM categories c
INNER JOIN categories p ON c.parent_id = p.id WHERE p.parent_id

<强>1。问题

这将始终选择所有类别,即使它们的 status = 0 这是一个问题。因此,我尝试将 AND status = 1 添加到两个 WHERE 语句中,但这不起作用,因为无论状态如何,所有类别都会被选中。

我尝试的第二件事是,因为在第一次选择时,我只选择带有 parent_id = 0 的类别,然后与所有类别建立一个 UNION,其中parent_id 与第一个选择中的那些 ID 匹配,我可以仅将 AND status = 0 添加到第一个 SELECT WHERE,然后状态为 0 的父类别将不会被选中,因此当进行 UNION 时,它的子类别也不会被选中已选择。但是,如果我只是将 AND status = 1 添加到第一个 WHERE 中,那么我只能获得具有 parent_id & status = 1 的类别,并且什么也不会发生工会。

<强>2。问题
一旦我做了这个选择,我就必须按位置值对类别和子类别进行排序,这可以在 PHP 中使用排序函数来完成,但是当您有大约 8000 个类别时,这是相当广泛的。

我尝试添加ORDER BY id ASC,position ASC。在我最后一个 WHERE 语句之后,我希望得到这样的输出:

| id  | parent_id | position |
| 1 | 0 | 1 |
| 3 | 1 | 1 |
| 6 | 1 | 2 |
| 2 | 0 | 2 |
| 4 | 2 | 1 |

或者甚至:

| id  | parent_id | position |
| 1 | 0 | 1 |
| 2 | 0 | 2 |
| 3 | 1 | 1 |
| 6 | 1 | 2 |
| 4 | 2 | 1 |

我认为第二个例子非常简单,当我的语句不包含 UNION ALL 时我就让它工作了。但对于 UNION,我的语句就像 status = 1 一样仅返回父类别。

SELECT * FROM categories WHERE parent_id = 0 UNION ALL SELECT c.* FROM categories c
INNER JOIN categories p ON c.parent_id = p.id WHERE p.parent_id ORDER BY parent_id ASC, position ASC;

由于所有父级的parent_id = 0,它们将首先列出,但按位置排序,然后所有子级将首先按parent_id排序,然后按位置排序。

最佳答案

如果我理解正确,我认为您想要以下内容:

SELECT DISTINCT c.* FROM categories c, categories p
WHERE c.status<>0 and (c.parent_id = 0 OR (c.parent_id=p.id and p.parent_id=0))
ORDER BY c.id,c.position

关于mysql - 通过 UNION ALL 中的两个字段进行选择并在行之间排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21943226/

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