2016-11-25 7 views
0

私は以下の質問をしています。カテゴリの名前とその深さを階層内に配信します。深さは「AS」値です。しかし、特定の深さの名前だけを選択できるようにしたい。すなわち深さ= 3です。私はこれを狙って、Google検索で仮想カラムを作成しようとしましたが、SQLではうまくいきません。何かアドバイス ? TKS!MySQLの "AS"値でSELECTを実行する方法。

SELECT node.name, (COUNT(parent.name) - 1) AS depth 
    FROM nested_categories AS node, 
    nested_categories AS parent 
    WHERE node.lft BETWEEN parent.lft AND parent.rgt 
    GROUP BY node.name 
    ORDER BY depth 

答えて

3

HAVING句を使用する必要があります。これは、WHERE句のようにたくさんあるが、それはプロセスの後半で計算され、その集計列上で動作することができます:

SELECT node.name, (COUNT(parent.name) - 1) AS depth 
FROM nested_categories AS node, 
nested_categories AS parent 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
GROUP BY node.name 
HAVING (COUNT(parent.name) - 1) = 3 
ORDER BY depth 
+0

これは簡単ではありません。午後、サブクエリと仮想カラムを作成しようとしていました。あなたはロックスターです。ありがとうございました !私はLaravelでMySQLを使用しています。 – Vince

+0

それはあなたが頻繁に使用するものではありませんが、HAVING節が必要な場合は、これを実行するのが難しいです!嬉しいことにあなたを助けました:-) –

1
:あなたのようにそれを記述する必要があります

SELECT node.name, (COUNT(parent.name) - 1) AS depth 
FROM nested_categories AS node, 
nested_categories AS parent 
WHERE node.lft BETWEEN parent.lft AND parent.rgt 
GROUP BY node.name 
HAVING depth = 3 
ORDER BY depth 

データベースエンジンに応じて、

SELECT depth 
    FROM ((COUNT(parent.name) - 1) 
      FROM nested_categories AS node, 
      nested_categories AS parent 
      WHERE node.lft BETWEEN parent.lft AND parent.rgt 
      GROUP BY node.name 
      ORDER BY depth) AS depth 
     WHERE depth=3; 
+0

すぐに戻ってくれてありがとう。 – Vince

関連する問題