ホームページ  >  記事  >  データベース  >  再帰クエリを使用せずに MySQL のリンク リストからデータを取得する方法

再帰クエリを使用せずに MySQL のリンク リストからデータを取得する方法

DDD
DDDオリジナル
2024-11-01 02:31:02378ブラウズ

How to Retrieve Data from a Linked List in MySQL Without Recursive Queries?

MySQL でリンクされたリスト データを取得する

MySQL データベースでは、以下のようなテーブル構造が表示されます。

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

タスクは、リンクされたリストの順序に従ってデータを取得することです。例として次のデータを考えてみましょう。

id next_id
1 2
2 4
3 9
4 3
9 NULL

結果は、1、2、4、3、9 の順序になる必要があります。

ただし、Oracle やデータベースなどの特定のデータベースとは異なります。 Microsoft SQL Server、MySQL は再帰クエリをサポートしていません。この問題は、SQL データベース内のツリー、具体的には細く細長いツリーを表現するのに似ています。

このタイプのデータ構造を管理するには、さまざまなソリューションが存在します。

  • [SQL でのツリー構造の表現]データベース](https://stackoverflow.com/questions/2321851/what-is-the-most-efficient-elegant-way-to-parse-a- flat-table-into-a-tr)
  • [再帰 SQL クエリ](https://stackoverflow.com/questions/71469/is-it-possible-to-make-a-recursive-sql-query)

クエリのクエリを制限するには「深さ」では、次のテクニックを使用します:

<code class="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);</code>

パフォーマンスが遅いにもかかわらず、このクエリはリンク リストごとに 1 つの行を生成します。

以上が再帰クエリを使用せずに MySQL のリンク リストからデータを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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