ホームページ  >  記事  >  データベース  >  再帰クエリを使用せずに MySQL でリンクされたリストを取得するにはどうすればよいですか?

再帰クエリを使用せずに MySQL でリンクされたリストを取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-01 01:22:28779ブラウズ

How Can I Fetch a Linked List in MySQL Without Recursive Queries?

MySQL データベースのリンク リストの取得

リンク リストのデータベース ストレージには特有の課題が生じます。 Oracle や Microsoft SQL Server などの他の RDBMS ソリューションとは異なり、MySQL はリンク リスト データを直接フェッチするために必要な再帰クエリをサポートしていません。

この問題の解決策は、RDBMS にツリー構造を格納するのと同様に、抽出を中心に展開します。データベースからリンクされたリストを取得し、クライアント側でそれを処理します。ただし、これにより、特定の深さでクエリを終了できるか、または行の条件に基づいてクエリを終了できるかどうかという問題が生じます。

MySQL には再帰クエリ機能が組み込まれていませんが、やや面倒な回避策が存在します。

<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 までご連絡ください。