2

テーブルが1つあります。例

catid | parentcatid | dirname
  4   |      0      | mobiles 
 243  |      4      | Nokia

私が得るとき私はcatid = 243一緒に取る必要がありますmysql_query (catid=parentcatid)

243 | mobiles | Nokia

最初に、、、catidおよびparentcatidwheredirnameid=243選択してから、同じwhereを選択できますparentcatid = catidが、

この単一のクエリを作成する方法は?

4

3 に答える 3

5

JOINテーブルを2回:

SELECT
  t2.catid, t1.dirname 'dirname', t2.dirname 'parentname'
FROM Tablename t1
INNER JOIN Tablename t2 ON t1.catid = t2.parentcatid
WHERE t2.catid = 243;

SQL フィドルのデモ

これにより、次のことが得られます。

| CATID | DIRNAME | PARENTNAME |
--------------------------------
|   243 | mobiles |      Nokia |
于 2013-01-15T14:34:07.690 に答える
3

自己結合を使用します。

SELECT parent.catid, parent.dirname
FROM yourtable AS parent
LEFT JOIN yourtable AS child ON (child.parentcatid = parent.catid)
WHERE child.catid = 243
于 2013-01-15T14:34:39.817 に答える
0

あなたの質問に対する文字通りの答えは、自己結合を使用することです(Marc Bが示唆しているように)。

行間を読むと、階層がどのくらい深くなるか事前にわからないと思います-これにより、自己結合の有用性が低下します。ツリーのより深いレベルを取得するために結合を継続する必要がある場合、ツリーのすべての部分が同じ深さに達しない場合は、おそらく外部結合を使用する必要があります。

別のアプローチ - はるかに複雑で、私の仮定が真の場合にのみこれを行う - は、再帰関数を使用するか、データをネストされたセットとして表すことです。

于 2013-01-15T14:40:22.077 に答える