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

私は同様の構造を持っており、これのバリエーションを使用します:

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

私はついにあなたが求めているものを正確に表示するようになりました。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レベルの親子関係でのみ機能することに注意してください。第3レベルがあり、それを3列で表示する必要がある場合は、さらに複雑になります。

于 2012-05-28T15:34:38.807 に答える
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

ほとんどの場合GROUP BY category_name、並べ替えと同様に行う必要があります。

これはまたあなたをかなり助けるかもしれません http://sqllessons.com/categories.html

于 2012-05-28T15:30:30.623 に答える
0

これは、3つの列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 に答える