ホームページ >データベース >mysql チュートリアル >MySQL はクライアント側の処理を行わずにリンクされたリスト データを取得できますか?

MySQL はクライアント側の処理を行わずにリンクされたリスト データを取得できますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-04 08:38:30876ブラウズ

Can MySQL Retrieve Linked List Data Without Client-Side Processing?

MySQL データベースからリンク リスト データを取得する

質問:

次の構造を持つ MySQL データベース テーブルがあるとします:

table
    id INT NOT NULL PRIMARY KEY
    data ..
    next_id INT NULL

データベースを使用してリンクリスト順にデータを取得できますか

回答:

残念ながら、MySQL はリンク リスト データを効率的に取得するために必要な再帰的クエリをサポートしていません。この問題は、リレーショナル データベースでツリー構造を表現することに似ています。

代替アプローチ:

ツリー状のデータを格納および取得する代替方法については、次の質問を参照してください。リレーショナル データベース システムからのデータ:

  • 「最も効率的/エレガントな解析方法は何ですか?」フラット テーブルをツリーにしますか?"
  • "再帰 SQL クエリを作成できますか?"

深さが制限されたクエリ:

クエリ結果の深さを制限したい場合は、不十分ではありますが、次のアプローチを採用できます。パフォーマンス:

SELECT * FROM mytable t1
 LEFT JOIN mytable t2 ON (t1.next_id = t2.id)
 LEFT JOIN mytable t3 ON (t2.next_id = t3.id)
 LEFT JOIN mytable t4 ON (t3.next_id = t4.id)
 LEFT JOIN mytable t5 ON (t4.next_id = t5.id)
 LEFT JOIN mytable t6 ON (t5.next_id = t6.id)
 LEFT JOIN mytable t7 ON (t6.next_id = t7.id)
 LEFT JOIN mytable t8 ON (t7.next_id = t8.id)
 LEFT JOIN mytable t9 ON (t8.next_id = t9.id)
 LEFT JOIN mytable t10 ON (t9.next_id = t10.id);

結果はリンク リストごとに 1 行で返されますが、クエリのパフォーマンスは遅くなります。

以上がMySQL はクライアント側の処理を行わずにリンクされたリスト データを取得できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。