-1

次の構造のMySQLテーブルがあります。

**Table elements :**

element_id  element_name    parent_id
1           UIG             0
2           CAM             1
3           IHG             1
4           USR             1
5           DBL             1
6           APD             1
7           RTM             1
8           OCR             2
9           IRT             3
10          ICR             3
11          OCR             2
12          USH             1
13          AML             1

特定の要素の子要素を見つける必要があります。

私は次のクエリを実行しました:

SELECT parent_id,GROUP_CONCAT(element_id)
FROM elements
WHERE parent_id='1'
GROUP BY parent_id

戻る、

+-----------+--------------------------+
| parent_id | GROUP_CONCAT(element_id) |
+-----------+--------------------------+
|         1 | 2,3,4,5,6,7,12,13        | 
+-----------+--------------------------+
1 row in set (0.00 sec)

要素2と3の子も必要ですが、結果として

+-----------+------------------------------------+
| parent_id | GROUP_CONCAT(element_id)           |
+-----------+------------------------------------+
|         1 | 2,3,4,5,6,7,8,9,10,11,12,13        | 
+-----------+------------------------------------+
1 row in set (0.00 sec)

手順とクエリだけでこれを実現するにはどうすればよいですか?

4

3 に答える 3

1

述語を使用してくださいIN ()...

SELECT '1' As Parent_Id,GROUP_CONCAT(element_id)
  FROM elements 
 WHERE Parent_Id IN ('1','2','3')
 GROUP BY '1';

一部のデータベースはGROUP BYこのシナリオで必要ですが、他のデータベースは必要ありませんが、不要な場合でもデータベースを含めることをお勧めします。

ちなみに、Parent_Idはある種の数値であると思われます。その場合、実際に読み取る必要があります...

SELECT 1 As Parent_Id,GROUP_CONCAT(element_id)
  FROM elements 
 WHERE Parent_Id IN (1,2,3)
 GROUP BY 1;

1 As Parent_Id実際にとをGROUP BY 1完全に除外することができます。

1つの値しか指定できない場合は、サブクエリを使用してください...

SELECT GROUP_CONCAT(element_id)
  FROM Elements 
 WHERE Parent_Id IN (SELECT Element_Id
                        FROM Elements
                       WHERE Parent_Id = 1)
于 2013-01-02T09:41:08.510 に答える
1

inサブクエリで演算子を使用する必要があります。

select group_concat(element_id)
from chpr
where parent_id in (
  select group_concat(element_id)
from chpr
where parent_id = 1
group by parent_id)
;

** OPのコメントによると、レベルは間違いなく懸念事項です**

ただし、最初のサンプルデータとリクエストに基づいて、質問の期待される出力に従って結果を提供するSQLFIDDLEDEMOがあります。

唯一の変更点は、最初のサブクエリelement_idと内部の両方でグループ化する必要があることです。parent_id

あまり洗練されていないクエリ:

select 1 as parent_id, group_concat(x.element_id)
from (
(select element_id
from chpr
where parent_id in
(select element_id
from chpr
where parent_id = 1
group by element_id, parent_id
))
union all
(select element_id
from chpr
where parent_id = 1
group by element_id, parent_id
)) x
;

結果:

PARENT_ID   GROUP_CONCAT(X.ELEMENT_ID)
1           8,9,10,11,2,3,4,5,6,7,12,13
于 2013-01-02T09:46:15.060 に答える
0

私のこの質問を見てください

単一のクエリ(再帰クエリ)でmysqlテーブル内のすべての親を検索する

そして、ここにこの種の仕事の情報源があります。

http://explainextended.com/2009/07/20/hierarchical-data-in-mysql-parents-and-children-in-one-query/

于 2013-01-02T09:39:42.377 に答える