1
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

如果有人可以提供一些想法或解决方案,我真的很感激。

4

5 回答 5

1

我终于让它准确地显示你所追求的。这是SQL:

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      |                | 
+-----------------+----------------+

请注意,这仅适用于 2 级父子关系。如果您有第三级并且需要在三列中显示它,那么它会变得更加复杂。

于 2012-05-28T15:34:38.807 回答
1

我有一个类似的结构,并使用它的变体:

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

您可能需要修改您使用的 JOIN 类型(我知道应该/不应该有孩子),但它会为您提供与父母一起的所有孩子类别,按照您要求的方式排序。

于 2012-05-28T15:31:04.967 回答
1
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

...对于您想要的结果,这是我能想到的最好的。看到它工作

于 2012-05-28T15:52:22.183 回答
0

这是显示具有三列 ID、名称、父 ID 的类别的列表和子列表的最佳答案

$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>";

在这段代码中,我们将父 ID 传递给函数和函数,然后再次调用自身以显示子类别

于 2014-07-12T18:44:39.547 回答
0

您很可能必须进行GROUP BY category_name排序。

这也可能对您有所帮助 http://sqllessons.com/categories.html

于 2012-05-28T15:30:30.623 回答