您好我试图解决和谷歌搜索如何使用SQL类别和子类别进行排序来选择html元素。我没有找到任何对我有用的想法。我有一张表categories
,它看起来像
id name parent
1 cat1 0
2 sub1 1
3 cat2 0
4 sub2 1
我的查询看起来像这样
SELECT `a`.*, `b`.*
FROM `categories` AS `a`
LEFT JOIN `categories` AS `b`
ON `a`.`id` = `b`.`parent`
WHERE `a`.`parent` IS NULL
但是它让我回到空阵列: - /请帮忙。
我想要这样的结果:
cat1
sub1
sub2
cat2
答案 0 :(得分:0)
你得到一个空数组,用于过滤' null'。 将您的查询更改为
"SELECT a.*, b.* from `categories` as a left join `categories` as b on a.id = b.parent where a.parent = 0"
这应该可以解决问题。
答案 1 :(得分:0)
你可以轻松地在php上制作它。以一种可以使用当前数据模型轻松完成的方式,在函数中实现递归,该递归将从null开始接收父ID。
在普通的sql中,你的问题不是如何检索,而是首先如何存储数据。我的意思是,如果你想在一个SQL中执行它(否则你可以尝试一个存储过程)。
在普通的SQL中,有很多方法可以做到这一点。例如,最容易检索的是最难存储的。
将您的父ID存储在字符串中:
Id Name node
1 Cat1. 1
2 Cat2. 2
3 subcat11. 1.1
4 Cat 3. 3
5 subcat12. 1.2
6 subcat21. 2.1
然后就是这样:
Select name,ID,node from table order by node
答案 2 :(得分:0)
$query = "SELECT a.*, b.* from `categories` as a left join `categories` as b on a.id = b.parent where a.parent=0";
return $db->select($query);
答案 3 :(得分:0)
就像其他人所说的那样,我认为你应该重新考虑如何存储你的数据,否则它会更难获取,如上所述:
假设您正在使用MySql:
select
sub.id as id,
case
when sub.parent is null then sub.name
else concat(' ', sub.name)
end as category_name,
cat.name as subcategory_name,
sub.parent
from categories as cat
right outer join categories as sub
on cat.id=sub.parent
where cat.parent is null or cat.parent='0'
order by sub.id, sub.name;
对于PostgreSQL:
select
sub.id as id,
case
when sub.parent is null then sub.name
else ' ' || sub.name
end as category_name,
cat.name as subcategory_name,
sub.parent
from categories as cat
right outer join categories as sub
on cat.id=sub.parent
where cat.parent is null or cat.parent=0
order by sub.id, sub.name;
应输出如下内容:
这样你就可以发送缩进的文本(并且你也得到了项目ID),这就是你想要填写的选项,我在猜测。从PHP结果集/数组中获取id
和category_name
字段。