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

MySQLのカテゴリに属する​​レコードのカウント

    カテゴリに列を追加して、各カテゴリが含まれるメインカテゴリを示します(メインカテゴリはそれ自体を示します)。だから:

    cat_id | main_cat_id | title
    -------+-------------+---------
    01     | 01          | Science
    0101   | 01          | Medicine
    02     | 02          | Sport
    

    cat_id =main_cat_idでこれを選択して、メインカテゴリを検索します。 left.cat_id =right.main_cat_idで自分自身に参加して子カテゴリを見つけ、次にcat_id=cat_idの投稿に参加します。 left.cat_idでグループ化し、cat_idとcount(*)を超えてプロジェクトします。

    PostgreSQL 8.4でこれを試しましたが、クエリが非常に基本的であるため、MySQLでこれが機能しない理由がわかりません。私のテーブル:

    create table categories(
      cat_id varchar(40) primary key,
      main_cat_id varchar(40) not null references categories,
      title varchar(40) not null
    )
    
    create table posts (
      post_id integer primary key,
      cat_id varchar(40) not null references categories,
      title varchar(40) not null
    )
    

    私のクエリ(IDではなくタイトルでグループ化):

    select m.title, count(*)
    from categories m, categories c, posts p
    where m.cat_id = c.main_cat_id
      and c.cat_id = p.cat_id
    group by m.title
    

    更新:OPが試したように、文字列操作でこれを機能させることも試みました。クエリ(MySQLの方言ではなくPostgreSQLで受け入れられる標準準拠のSQL)は次のとおりです。

    select m.title, count(*)
    from categories m, posts p
    where m.cat_id = substring(p.cat_id from 1 for 2)
    group by m.title;
    

    これは問題なく動作します。速度に関して意味のある比較を提供することはできませんが、このクエリプランは、双方向結合のクエリプランよりも少し単純に見えました。



    1. MySqlCommandを使用してストアドプロシージャを実行するときのSqlNullValueException

    2. どのバージョンのPostgreSQLを実行していますか?

    3. ノードjsmysqlクエリのスラッシュを削除します

    4. レールはグループ化後に最新の値を表示します