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如果有人能给出一些想法或解决方案,我将非常感激。
发布于 2012-05-28 23:52:22
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...is这是我能想出的最好的结果。See it working。
发布于 2012-05-28 23:31:05
我有一个类似的结构,并使用以下的变体:
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你可能不得不修补你使用的连接类型(我知道什么应该/不应该有孩子),但它会给你所有的孩子类别和他们的父母,按照你所要求的方式排序。
发布于 2012-05-28 23:34:39
我终于让它显示出你想要的东西了。下面是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 | |
+-----------------+----------------+请注意,这只适用于两级的父子关系。如果你有第三层,并且需要在三列中显示它,那么它就会变得复杂得多。
https://stackoverflow.com/questions/10786973
复制相似问题