Php 如何以适当的顺序列出父类别和子类别数据
我试着先列出排序顺序为父类别的数据,然后列出子类别的数据Php 如何以适当的顺序列出父类别和子类别数据,php,mysql,Php,Mysql,我试着先列出排序顺序为父类别的数据,然后列出子类别的数据 table : category | id + category_name + parent_category_id | | 1 | Flower | 0 | | 2 | Wall Decor | 0 | | 3 | Stylish Living| 0 | | 4 |
table : category
| id + category_name + parent_category_id |
| 1 | Flower | 0 |
| 2 | Wall Decor | 0 |
| 3 | Stylish Living| 0 |
| 4 | Mug | 0 |
| 5 | Sun Flower | 1 |
| 6 | Balsam | 1 |
当我尝试时,我不能像上面那样得到,下面是我得到的,花>太阳花和花>香脂应该在花下
Flower
flower > Sun Flower
flower > Balsam
Wall Decor
Stylish Living
Mug
如果有人能给出一些想法或解决方案,我会非常感激。您很可能需要按类别(名称)分组以及排序 这也可能对你有很大帮助
我有一个类似的结构,并使用此结构的一个变体:
Flower
Wall Decor
Stylish Living
Mug
flower > Sun Flower
flower > Balsam
您可能需要修改您使用的加入类型(我知道什么应该/不应该有孩子),但它将为您提供与家长一起的所有孩子类别,并按照您要求的方式进行排序。我终于获得了它,以准确显示您想要的内容。下面是SQL:
SELECT
p.category_id, p.category_name,
c.category_id, c.category_name
FROM category AS c
JOIN category AS p ON (c.parent_category_id = p.category_id)
ORDER BY p.category_name, c.category_name
以下是输出:
SELECT p.category_name as parent_category, '' as child_category
FROM category AS p
WHERE parent_category_id not in (select category_id from category)
UNION
SELECT p.category_name as parent_category, c.category_name as child_category
FROM category AS p
JOIN category AS c ON (c.parent_category_id = p.category_id)
ORDER BY parent_category, child_category
请注意,这只适用于两级父子关系。如果您有第三个级别,并且需要在三列中显示它,那么它会变得更加复杂
+-----------------+----------------+
| parent_category | child_category |
+-----------------+----------------+
| Flower | |
| Flower | Balsam |
| Flower | Sun Flower |
| Mug | |
| Stylish Living | |
| Wall Decor | |
+-----------------+----------------+
…是我能为您提供的最好结果 这是显示具有三列id、名称、父id的类别列表和子列表的最佳答案
SELECT category
FROM (
SELECT
IF(p.category_name is null, c.category_name, CONCAT(p.category_name, ' > ', c.category_name)) AS 'category'
FROM category c
LEFT JOIN category p ON c.parent_category_id = p.category_id
) s
ORDER BY category
$con=mysqli_connect(“localhost”、“root”、“test”);
$sql=“从父级为0的类别中选择*”;
$result=mysqli\u查询($con,$sql);
回声“;
while($row=mysqli\u fetch\u数组($result))
{
回显“”$row['name']。“ ”;
abc($row['id']);
}
功能abc($id)
{
全球$con;
$sql=“从父项为$id的类别中选择*”;
$result=mysqli\u查询($con,$sql);
回声“;
while($row=mysqli\u fetch\u数组($result))
{
回显“”$row['name']。“ ”;
abc($row['id']);
}
回声“;
}
回声“;
在这段代码中,我们将父id传递给function,然后function再次调用自身以显示子类别您可以显示您的查询吗?请显示不起作用的现有查询。我很确定您需要使用
左联接
,由于父母没有他们自己的父母,并且在加入过程中会被过滤掉,毫无疑问,使用WHERE's和JOINs变量进行过滤是正确的。我从我的代码中复制的代码片段比这个要广泛得多,所以从一开始就尽量简化它。@ruslyrossi是连接函数,它只是将字符串连接在一起。就像PHP中的“字符串1”、“字符串2”。
$con=mysqli_connect("localhost","root","","test");
$sql="select * from category where parent=0";
$result=mysqli_query($con,$sql);
echo "<ol>";
while($row=mysqli_fetch_array($result))
{
echo "<li >".$row['name']."</li>";
abc($row['id']);
}
function abc($id)
{
global $con;
$sql="select * from category where parent=$id";
$result=mysqli_query($con,$sql);
echo "<ol>";
while($row=mysqli_fetch_array($result))
{
echo "<li>".$row['name']."</li>";
abc($row['id']);
}
echo "</ol>";
}
echo "</ol>";