1

次のMysql構造を取得しました

categories tab
--------------------------
layer1 | layer2 | layer3
--------------------------
echo   | brain  |
echo   |        |
echo   | foo    |
echo   | brain  | diffuse
echo   | brain  | clear
echo   | cheesy | nuts
echo   | cheesy |   

次の構造をHTMLリストとして出力しようとしました

  • エコー

    • (...) 脳

    • (...)安っぽい

    • ふー

(...) は、ユーザーにとって、brain と cheesy には提供する子要素もあるというヒントになるはずです。

たとえば、彼が脳をクリックすると、次のビューが表示されます。

  • エコー

      • クリア

      • びまん性

    • (...)安っぽい

    • ふー

これは私を夢中にさせます...非常に多くのGROUP / ORDER BY、UNION、およびCASEバリアントを試しましたが、わかりません-.-

4

1 に答える 1

0

データを保存する方法を考えると、おそらくこれを 1 つの SQL クエリで行うことはできません。そうしないと、脳がとろけるほど複雑になるので、そうするのは悪い考えです. Brian Kernighan のアドバイスを思い出してください。

デバッグは、最初にコードを書くよりも 2 倍大変です。したがって、コードをできるだけ賢く書いたとしても、定義上、それをデバッグするほど賢くはありません。

最初のクエリは非常に簡単に実行できます。

SELECT layer1, layer2, COUNT(layer3) AS dotdotdot
FROM categories
WHERE layer1 = 'echo'
GROUP BY layer1, layer2

dotdotdotが null 以外の場合、レイヤー 3 にゼロ以外の数のサブカテゴリがあります。

ユーザーが「brain」を強調表示した場合は、ループ内の最初のクエリの結果を表示するときに、もう 1 つのクエリを実行します。

SELECT layer3
FROM categories
WHERE layer2 = 'brain'

以上です。1 つのクエリですべてを実行する独創的な方法を見つけるのではなく、2 つのクエリを実行するのは非常に退屈に思えるかもしれませんが、複雑な問題をより小さな問題に分解すると、より単純かつ効率的になることが多いことに驚かれることでしょう。

もっと合理化したものが必要な場合は、私のプレゼンテーションModels for Hierarchical Data with SQL and PHP をチェックしてください。実装しようとしている種類の問題の例を示します。階層内の特定のレベルの選択的な展開です。しかし、私はあなたとは異なる方法でデータを保存することで問題を解決します。

于 2013-11-06T02:20:25.817 に答える