sql >> データベース >  >> RDS >> Mysql

カテゴリとその親を取得するクエリで、2つのテーブルをカテゴリと結合します

    まず、ご使用のバージョンのMySQL(MariaDB 10.3)は一般的なテーブル式をサポートしているため、クエリでの変更変数の使用を回避する方法があります。クエリ内の変数を変更することは、階層クエリを実行する 方法です。 一般的なテーブル式がサポートされる前は、これは非推奨の戦術であり、常に意図したとおりに機能するという保証は文書化されていません。

    したがって、これは一般的なテーブル式(cte)で同じことを行うためのクエリです。ここで8はサンプル値です(PHP式に置き換えてください):

    with recursive 
    cte as (
        select 1 as categoryDepth,
               c.* 
        from   tbl_categories c
        where  categoryId = 8
        union
        select cte.categoryDepth + 1, 
               c.*
        from   cte
        inner join tbl_categories c
                on c.categoryId = cte.categoryParentId
    )
    select   * 
    from     cte
    order by categoryDepth desc;
    

    そして今、この2番目のテーブルがある場合、最初に共用体を定義するための共通テーブル式を実行してから、上記のように続行できます。

    with recursive 
    base as (
        select * from tbl_categories
        union
        select * from tbl_categories_custom
    ),
    cte as (
        select 1 as categoryDepth,
               base.* 
        from   base
        where  categoryId = 8
        union
        select cte.categoryDepth + 1, 
               base.*
        from   cte
        inner join base
                on base.categoryId = cte.categoryParentId
    )
    select   *
    from     cte
    order by categoryDepth desc;
    



    1. SQLSTATE[HY000][1045]CakePHPを使用したユーザー'username'@'localhost'のアクセスが拒否されました

    2. Mysqli_fetch_assoc($ result)、ポインタは次のレコードに移動します。クエリ結果の先頭へのポインタをリセットする方法はありますか?

    3. 合計に達するまで選択する方法

    4. PHPのSQLパーサー?