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

SQLタグリストとタグフィルタリング

    left join tags テーブルを作成し、検索対象のIDをjoin句に含め、havingのカウントを確認します。 。

    SELECT u.id,u.name,GROUP_CONCAT(ut.tagid) as tags
    FROM users u 
    LEFT JOIN usertag as ut ON u.id = ut.userid 
    LEFT JOIN tags t ON t.id=ut.tagid AND t.ID IN (10,20,30) --change this as needed
    GROUP BY u.id,u.name
    HAVING COUNT(ut.tagid) >= COUNT(t.id) AND COUNT(t.id) = 3 --change this number to the number of tags
    

    もう1つのオプションは、FIND_IN_SETを使用することです。 値が限られている場合。たとえば、

    SELECT * FROM (
    SELECT u.*, GROUP_CONCAT(ut.tagid) as tags 
    FROM users as u 
    LEFT JOIN usertag as ut ON u.id = ut.userid 
    GROUP BY u.id
    ) T
    WHERE FIND_IN_SET('10',tags) > 0 AND FIND_IN_SET('20',tags) > 0
    



    1. mysqlテーブルのテキストを見つけて置き換える方法

    2. InsertステートメントのPostgresでUUIDを生成しますか?

    3. sqlgroupbyとdistinct

    4. プリペアドステートメントを使用したSQLORDERBY