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

複数のキーワードを持つWHERELIKE

    私は再考しました、そしておそらくこのアプローチはより良いです:

    SELECT T1.id
    FROM 
    (  
    select textures.id 
    from textures
    WHERE textures.name LIKE '%texture1%' 
    UNION 
    select textures.id 
    from textures
    join category_texture on category_texture.texture_id = textures.id
    join categories on categories.id = category_texture.category_id
    WHERE categories.name LIKE '%texture1%'
    UNION
    select textures.id 
    from textures
    join tag_texture on tag_texture.texture_id = textures.id
    join tags on tags.id = tag_texture.tag_id
    WHERE tags.name LIKE '%texture1%'
    UNION 
    select textures.id 
    from textures
    join size_texture on size_texture.texture_id = textures.id
    join sizes on sizes.id = size_texture.size_id 
    WHERE sizes.name LIKE '%texture1%'
    ) AS T1
    JOIN 
    (  
    select textures.id 
    from textures
    WHERE textures.name LIKE '%category2%' 
    UNION 
    select textures.id 
    from textures
    join category_texture on category_texture.texture_id = textures.id
    join categories on categories.id = category_texture.category_id
    WHERE categories.name LIKE '%category2%'
    UNION
    select textures.id 
    from textures
    join tag_texture on tag_texture.texture_id = textures.id
    join tags on tags.id = tag_texture.tag_id
    WHERE tags.name LIKE '%category2%'
    UNION 
    select textures.id 
    from textures
    join size_texture on size_texture.texture_id = textures.id
    join sizes on sizes.id = size_texture.size_id 
    WHERE sizes.name LIKE '%category2%'
    ) AS T2
    ON T1.id = T2.id
    JOIN
    (  
    select textures.id 
    from textures
    WHERE textures.name LIKE '%tag3%' 
    UNION 
    select textures.id 
    from textures
    join category_texture on category_texture.texture_id = textures.id
    join categories on categories.id = category_texture.category_id
    WHERE categories.name LIKE '%tag3%'
    UNION
    select textures.id 
    from textures
    join tag_texture on tag_texture.texture_id = textures.id
    join tags on tags.id = tag_texture.tag_id
    WHERE tags.name LIKE '%tag3%'
    UNION 
    select textures.id 
    from textures
    join size_texture on size_texture.texture_id = textures.id
    join sizes on sizes.id = size_texture.size_id 
    WHERE sizes.name LIKE '%tag3%'
    ) AS T3
    ON T1.id = T3.id
    

    JOIN...ON T1.id = Tn.idを追加するだけです。 パラメータに一致するセクション。

    これが実行中であることを示すフィドルです: http://sqlfiddle.com/#!9/ 9abe6 / 1



    1. if-elseステートメントエラーが発生しないことをトリガーします

    2. SQLServerのCHARとVARCHARの違いは何ですか-SQLServer/T-SQLチュートリアルパート31

    3. MySQL InnoDB:非主キーを自動インクリメントします

    4. group by inを使用して、行のIDを返します