mysql ツリー クエリを実装するための 25 行のコードの詳細な説明
この記事では、主に 25 行の mysql ツリー クエリ コードについて詳しく説明します。お役に立てれば幸いです。
要件: 現在の (任意の) レベルの下にあるすべての子ノードを検索します。
カスタム mysql 関数を通じて実現します。最初にコードを貼り付け、後で詳細な手順を示します:
delimiter $$ CREATE FUNCTION `getChildList`(rootId INT) RETURNS varchar(1024) BEGIN DECLARE childListStr VARCHAR(1024); DECLARE tempChildStr VARCHAR(1024); DECLARE rootIdStr VARCHAR(64); SET childListStr=NULL; SET rootIdStr=cast(rootId as CHAR); myloop: WHILE TRUE DO SELECT GROUP_CONCAT(id) INTO tempChildStr FROM test where FIND_IN_SET(parrent_id,rootIdStr)>0; IF tempChildStr IS NOT NULL THEN SET rootIdStr=tempChildStr; IF childListStr IS NULL THEN SET childListStr=tempChildStr; ELSE SET childListStr=concat(childListStr,',',tempChildStr); END IF; ELSE LEAVE myloop; END IF; END WHILE; RETURN childListStr; END $$
テーブル SQL を作成します:
CREATE TABLE `test` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `parrent_id` int(11) DEFAULT '0', `name` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8; +------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+------------------+------+-----+---------+----------------+ | id | int(11) unsigned | NO | PRI | NULL | auto_increment | | parrent_id | int(11) | YES | | 0 | | | name | varchar(32) | YES | | NULL | | +------------+------------------+------+-----+---------+----------------+ +----+------------+------+ | id | parrent_id | name | +----+------------+------+ | 1 | 0 | cg1 | | 2 | 1 | cg2 | | 3 | 2 | cg3 | | 4 | 3 | cg4 | | 5 | 4 | cg5 | | 6 | 5 | cg6 | | 7 | 6 | cg7 | | 8 | 7 | cg8 | | 9 | 8 | cg9 | | 10 | 1 | cg10 | | 11 | 2 | cg11 | +----+------------+------+
行 1:
delimiter 関数本体の内容を記述するときは、DELIMITER キーワードを使用する必要があります区切り文字を区切るには、最初に別の値に変更してください。そうしないと、ステートメントを作成するときに ';' を記述するときに直接実行され、関数が失敗します。
行 2 ~ 4: mysql 関数の構文の仕様、あまり説明はありません。
行 5 ~ 9: ロジックに必要な変数を定義します。
childListStr: 最終的に返された子ノード ids_str (例: "1,2,3,4,5")。
tempChildStr: 一時的な子ノードの ids_str (例: "1")。
rootIdStr: 入力ルートノードをchar型に変換します。
行 10 ~ 23: 関数全体の最も重要な部分は、while での tempChildStr の処理と、組み込み関数 GROUP_CONCAT と FIND_IN_SET の理解です
每一次循环,通过 GROUP_CONCAT函数找出输入的根节点的直接下级节点,通过GROUP_CONCAT函数得到这些子节点的id组成的字符串。并将这次得到的子字符串作为根节点,去寻找下一级的所有的子节点。 最后找到最后子节点没有下级时候,tempChildStr IS NOT NULL。退出循环,返回结果。
実行結果:
mysql> select getChildList(1); +-----------------------+ | getChildList(1) | +-----------------------+ | 2,10,3,11,4,5,6,7,8,9 | +-----------------------+ 1 row in set (0.00 sec) mysql> select getChildList(2); +------------------+ | getChildList(2) | +------------------+ | 3,11,4,5,6,7,8,9 | +------------------+ 1 row in set (0.00 sec)
関連する推奨事項:
SQL ステートメント実装の子孫 ツリー クエリの古典的な例
mysql - MYSQL を使用して再帰ツリー クエリによる接続による Oracle 開始を実装する
以上がmysql ツリー クエリを実装するための 25 行のコードの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

NAVICAT自体はデータベースパスワードを保存せず、暗号化されたパスワードのみを取得できます。解決策:1。パスワードマネージャーを確認します。 2。NAVICATの「パスワードを記憶する」機能を確認します。 3.データベースパスワードをリセットします。 4.データベース管理者に連絡してください。

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

次のコマンドでmysqlデータベースを表示します。サーバーに接続します:mysql -u username -pパスワードrun showデータベース。すべての既存のデータベースを取得するコマンド[データベース]を選択します。データベース名を使用します。テーブルを表示:表を表示します。テーブル構造を表示:テーブル名を説明してください。データを表示:[テーブル名]から[ *]を選択します。

MySQLでテーブルをコピーするには、新しいテーブルの作成、データの挿入、外部キーの設定、インデックスのコピー、トリガー、ストアドプロシージャ、および機能が必要です。特定の手順には、同じ構造を持つ新しいテーブルの作成が含まれます。元のテーブルからデータを新しいテーブルに挿入します。同じ外部キーの制約を設定します(元のテーブルに1つがある場合)。同じインデックスを作成します。同じトリガーを作成します(元のテーブルに1つがある場合)。同じストアドプロシージャまたは関数を作成します(元のテーブルが使用されている場合)。

Passwordが暗号化された形式で保存されているため、MariadbのNavicatはデータベースパスワードを直接表示できません。データベースのセキュリティを確保するには、パスワードをリセットするには3つの方法があります。NAVICATを介してパスワードをリセットし、複雑なパスワードを設定します。構成ファイルを表示します(推奨されていない、高リスク)。システムコマンドラインツールを使用します(推奨されません。コマンドラインツールに習熟する必要があります)。

MySQLのコピーと貼り付けには、次の手順が含まれています。データを選択し、Ctrl C(Windows)またはCMD C(MAC)でコピーします。ターゲットの場所を右クリックして、貼り付けまたはCTRL V(Windows)またはCMD V(MAC)を使用します。コピーされたデータは、ターゲットの場所に挿入されるか、既存のデータを置き換えます(データが既にターゲットの場所に存在するかどうかに応じて)。

NAVICATでSQLを実行する手順:データベースに接続します。 SQLエディターウィンドウを作成します。 SQLクエリまたはスクリプトを書きます。 [実行]ボタンをクリックして、クエリまたはスクリプトを実行します。結果を表示します(クエリが実行された場合)。
