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

MySQL不要な行を削除するSQLの定義についてサポートが必要

    DISTINCTはSELECTのすべての列で機能するため、すべてを選択すると、個別の投稿だけでなく、各個別の行が返されます。これを回避するには、postsテーブルからデータを選択し、それを区別します。つまり、

    SELECT DISTINCT posts.*
    

    しかし、可能であれば、投稿や猫の情報も必要だと言っています。これを行い、投稿ごとに1行を維持する1つの方法は、 GROUP_CONCAT そのため、クエリは次のようになる可能性があります。

    SELECT 
       posts.*,
       GROUP_CONCAT(cats.id SEPARATOR ',') as catsList,
       GROUP_CONCAT(tags.id SEPARATOR ',') as tagsList
    FROM posts
    INNER JOIN termRelations ON ( posts.id = termRelations.postId )
    LEFT JOIN cats ON ( termRelations.termId = cats.id AND termRelations.termTypeId = 1 AND cats.id =5 )
    LEFT JOIN tags ON ( termRelations.termId = tags.id AND termRelations.termTypeId = 0 AND 
       (tags.id =2
       OR tags.id =1)
    )
    GROUP BY posts.id
    LIMIT 0 , 30
    

    最初の結合をINNERJOINに変更したり、関連するテーブルのJOIN条件にcats / tagsフィルターを追加したりするなど、元のクエリに他のいくつかの変更を加えました。

    psリストの生成を高速化するために猫とタグ用に別々のテーブルがあると言うと、正しくインデックス付けされた1つのテーブルが同じくらい高速で、コードも単純化されることがあります。




    1. レシピデータベース、材料で検索

    2. 数日間の累積合計

    3. MySQLロードデータファイル

    4. 部分的な単語が一致する複数列のmysql全文検索を行う方法