这是我的表格数据。如果cat_parent_id为0,则表示其父级,例如People and Culture是cat_id = 1的父级,Employee Benefits and Certification是People and Culture的子级。但是,员工福利和认证也有孩子。雇员福利cat_id = 6,因此他的孩子是SSS贷款查询,而证书的cat_id = 10,则他的孩子将是就业证明和SSS贡献证书。
预期输出:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie-edge">
<link rel="stylesheet" href="css/styles.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="css/font-awesome.min.css">
<title>Puerto Rico & Florida Recovery Training Academy</title>
</head>
<body>
<header>
<nav>
<input type="checkbox" id="nav" class="hidden">
<label for="nav" class="nav-btn">
<i></i>
<i></i>
<i></i>
</label>
<div class="logo">
<a href="#">PRFTA</a>
</div>
<div class="nav-wrapper">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Nosotros</a></li>
<li><a href="#">Contacto</a></li>
<li><a href="#" class="cursos">Cursos</a></li>
</ul>
</div>
</nav>
</div>
</nav>
<div class="wrapper">
<div class="container">
<h1>Puerto Rico & Florida Recovery Training Academy</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vitae doloremque autem nam, illo nisi soluta voluptatibus et in fugiat aliquid nostrum asperiores. Laboriosam vitae, minus odio! Iure id quaerat voluptatum.</p>
<a href="#section-a" class="button">MAS INFORMACIÓN</a>
</div>
</div>
</header>
<section id="section-a">
<div class="wrapper">
<ul>
<li><img src="prueba.png" alt=""></li>
<li><img src="prueba.png" alt=""></li>
<li><img src="prueba.png" alt=""></li>
<li><img src="prueba.png" alt=""></li>
</ul>
<div class="content">
<h1>¿PORQUÉ ESCOJER PRFTA?</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aspernatur error deserunt saepe explicabo obcaecati cupiditate dolor quam, nisi illo! Soluta.</p>
</div>
<div class="features">
<div class="feature">
<i class="fa fa-gear icon"></i>
<div class="feature-contnt">
<h2>¿PORQUÉ ESCOJER PRFTA?</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati, odit, earum! Veniam, repudiandae, ullam. Officia ut officiis voluptatem doloremque praesentium?</p>
</div>
</div>
<div class="feature">
<i class="fa fa-gear icon"></i>
<div class="feature-contnt">
<h2>¿PORQUÉ ESCOJER PRFTA?</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati, odit, earum! Veniam, repudiandae, ullam. Officia ut officiis voluptatem doloremque praesentium?</p>
</div>
</div>
</div>
<!-- Features Two. -->
<div class="features">
<div class="feature">
<i class="fa fa-gear icon"></i>
<div class="feature-contnt">
<h2>¿PORQUÉ ESCOJER PRFTA?</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati, odit, earum! Veniam, repudiandae, ullam. Officia ut officiis voluptatem doloremque praesentium?</p>
</div>
</div>
<div class="feature">
<i class="fa fa-gear icon"></i>
<div class="feature-contnt">
<h2>¿PORQUÉ ESCOJER PRFTA?</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati, odit, earum! Veniam, repudiandae, ullam. Officia ut officiis voluptatem doloremque praesentium?</p>
</div>
</div>
</div>
</div>
</section>
<!-- Slider. -->
<!-- Preguntas -->
<section id="section-b">
<div class="preguntas">
<div class="wrapper">
<h1>Preguntas frecuentes</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit laboriosam repellat labore, ad qui assumenda. Beatae perferendis at, provident aspernatur.</p>
</div>
</div>
<!-- Preguntas 2 en flex -->
<div class="wrapper">
<div class="features-a">
<div class="feature-a">
<div class="feature-contnt2">
<h2>¿PORQUÉ ESCOJER PRFTA?</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati, odit, earum! Veniam, repudiandae, ullam. Officia ut officiis voluptatem doloremque praesentium?</p>
</div>
</div>
<div class="feature-a">
<div class="feature-contnt2">
<h2>¿PORQUÉ ESCOJER PRFTA?</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati, odit, earum! Veniam, repudiandae, ullam. Officia ut officiis voluptatem doloremque praesentium?</p>
</div>
</div>
</div>
<!-- Preguntas 2-4 en flex -->
<div class="features-a">
<div class="feature-a">
<div class="feature-contnt2">
<h2>¿PORQUÉ ESCOJER PRFTA?</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati, odit, earum! Veniam, repudiandae, ullam. Officia ut officiis voluptatem doloremque praesentium?</p>
</div>
</div>
<div class="feature-a">
<div class="feature-contnt2">
<h2>¿PORQUÉ ESCOJER PRFTA?</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati, odit, earum! Veniam, repudiandae, ullam. Officia ut officiis voluptatem doloremque praesentium?</p>
</div>
</div>
</div>
<!-- Preguntas 4-6 en flex -->
<div class="features-a">
<div class="feature-a">
<div class="feature-contnt2">
<h2>¿PORQUÉ ESCOJER PRFTA?</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati, odit, earum! Veniam, repudiandae, ullam. Officia ut officiis voluptatem doloremque praesentium?</p>
</div>
</div>
<div class="feature-a">
<div class="feature-contnt2">
<h2>¿PORQUÉ ESCOJER PRFTA?</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Obcaecati, odit, earum! Veniam, repudiandae, ullam. Officia ut officiis voluptatem doloremque praesentium?</p>
</div>
</div>
</div>
</div>
<!-- Curso -->
<div class="clase">
<div class="wrapper">
<h1>¿Listos para comenzar?</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Praesentium possimus officia, consequuntur repellat natus voluptatibus ad explicabo architecto! Quos, saepe!</p>
<div class="botones">
<a href="#section-a" class="btn">PRESENCIAL</a>
<a href="#section-a" class="btn2">EN LINEA</a>
</div>
</div>
</div>
</div>
</section>
</body>
</html>
此刻我有点运气。
Admin and Facilities
• Safety and Security Related Concerns
• CCTV Footage
Information Technology
• User Account
• Enable / Disable Access
People and Culture
• Certification
• Certificate of Employment
• SSS Certificate of Employment
• Employee Benefits Request
• SSS Loan Inquiry
主要目标是按字母顺序对每个父级(第一优先级),类别(第二优先级),子类别(第三优先级)进行数据排序。我正在使用别名排序器,但无法正常工作。
答案 0 :(得分:1)
在MySQL 8之前的版本中,递归查询非常棘手。在您的情况下,您似乎只有3个级别(0、1和2),因此最好多次自我外联表,以获取从根到每个节点的路径。
最后,对从根到子的“路径”中的名称进行串联排序:
select a.cat_id, a.cat_level, a.cat_name,
concat(
ifnull(concat(c.cat_name, ' '), ''),
ifnull(concat(b.cat_name, ' '), ''),
a.cat_name) as cat_order
from ticket_categories a
left join ticket_categories b on b.cat_id = a.cat_parent_id
left join ticket_categories c on c.cat_id = b.cat_parent_id
order by cat_order;
您可以轻松扩展此查询以支持更多级别;只需添加许多left join
行和表别名,并相应地扩展concat
表达式即可。
在MySQL 8中,您可以使用可以处理任意多个级别的递归查询:
with recursive cte(cat_id, cat_level, cat_name, cat_order) as (
select cat_id, cat_level, cat_name, cat_name
from ticket_categories
where cat_parent_id = 0
union
select t.cat_id, t.cat_level, t.cat_name, concat(cte.cat_order, ' ', t.cat_name)
from cte
inner join ticket_categories t on t.cat_parent_id = cte.cat_id
)
select * from cte
order by cat_order;
两个查询的输出:
cat_id | cat_level | cat_name | cat_order
-------+-----------+--------------------------------------+-------------------------------------------------------------------------------
3 | 0 | Admin and Facilities | Admin and Facilities
4 | 1 | Safety and Security Related Concerns | Admin and Facilities Safety and Security Related Concerns
9 | 2 | CCTV Footage Request | Admin and Facilities Safety and Security Related Concerns CCTV Footage Request
2 | 0 | Information Technology | Information Technology
5 | 1 | User Account | Information Technology User Account
8 | 2 | Enable / Disable Access | Information Technology User Account Enable / Disable Access
1 | 0 | People and Culture | People and Culture
10 | 1 | Certification | People and Culture Certification
11 | 2 | Certificate of Employment | People and Culture Certification Certificate of Employment
12 | 2 | SSS Certificate of Contributions | People and Culture Certification SSS Certificate of Contributions
在路径(cat_order
)中使用双精度空格作为分隔符。假设您的名字中不会包含双倍空格。如果可能的话,如果也您使用的名称中,一个是另一个的前缀,则顺序可能会出错。
对于最终的缩进格式,您将使用cat_level
列。但是我认为这种任务不属于SQL,尽管使用它很容易
concat(repeat(' ', cat_level), cat_name)
两个查询都为db fiddle。