0

私のデータベースが次のようになっている場合:-

| CATAGORY_ID | CATAGORY_NAME | PARENT_ID |
-------------------------------------------
|           1 |             x |         0 |
|           2 |             y |         1 |
|           3 |             z |         2 |

これを使用して1つの階層を取得しましたが、parent_id = 0を取得するまでdsを実行したい

SELECT catagory_name
FROM catagory_master
WHERE catagory_id = ( 
SELECT parent_id
FROM catagory_master
WHERE catagory_id =4 ) 

catagory_id=3 の xyz と catagory_id=2 の xy と catagory_id=1 の x が必要な場合は、php スクリプトでこれを実行する必要があります。

4

3 に答える 3

1

このクエリを試してください

select 
catagory_id,
catagory_name,
@pv:=parent_id as 'parent_id'
from (select * from table1 order by catagory_id desc)a
join
(select @pv:=3)tmp
where catagory_id=@pv

SQLフィドル

| CATAGORY_ID | CATAGORY_NAME | PARENT_ID |
-------------------------------------------
|           3 |             z |         2 |
|           2 |             y |         1 |
|           1 |             x |         0 |

注:このクエリは、がそのレコードのparent_idよりも常に小さい場合に機能します。category_idorder by desc フィールドを削除すると、レコードが 1 つだけ取得されます。ストアドプロシージャよりも適切な具体的なソリューションが必要な場合..

于 2013-05-24T06:59:47.823 に答える
0

必要なものが得られたら、これに IN を使用する必要があります。

SELECT catagory_name
FROM catagory_master
WHERE catagory_id IN ( 
    SELECT parent_id
    FROM catagory_master
    WHERE catagory_id = 4 ) 
于 2013-05-24T06:44:21.410 に答える
0

If your database supports RECURSIVE queries, you can do something like this:

WITH RECURSIVE category_tree(id, name, path, level) AS (
        SELECT catagory_id, catagory_name, ARRAY[id], 0
    FROM catagory_master
    WHERE parent_id = 0
    UNION ALL
    SELECT catagory_master.catagory_id, catagory_master.catagory_name, path || catagory_master.catagory_id, level + 1
    FROM category_tree
    JOIN catagory_master ON catagory_master.parent_id = category_tree.catagory_id
    WHERE NOT catagory_master.catagory_id = ANY(path)
    )
    SELECT * FROM category_tree where 0 = ANY(path) ORDER BY path ;

And you should have something like this, that can be used to buid a tree:

enter image description here

于 2013-05-24T06:57:05.760 に答える