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

カンマ区切りの値を持つ単一のMySQLフィールド

    このソリューションを使用できます:

    SELECT b.filename
    FROM posts a
    INNER JOIN images b ON FIND_IN_SET(b.imageid, a.gallery) > 0
    WHERE a.postid = 3
    

    SQLFiddle

    ただし、実際にはデザインを正規化し、投稿と画像の間で相互参照テーブルを使用する必要があります。これは、N:M(多対多)関係を表すための最良かつ最も効率的な方法です。検索がはるかに効率的であるだけでなく、更新が大幅に簡素化されます。 および削除 画像の関連付け。

    相互参照テーブルを使用してN:M関係を適切に表現した場合でも、imageidを取得できます。 CSV形式の:

    posts_has_imagesがあるとします。 主キーフィールド(postid)を含むテーブル 、imageid ):

    GROUP_CONCAT()を使用できます imageidのCSVを取得するには 各postidの :

    SELECT postid, GROUP_CONCAT(imageid) AS gallery
    FROM posts_has_images
    GROUP BY postid
    


    1. SQLServerの文字列からすべてのスペースを削除します

    2. SQLPlusでスクリプトを実行すると、出力の代わりに一連の数値が出力されます

    3. 問題:Mysqlが列挙型をIntに変換する

    4. 節が機能する場所はtinyintでは機能しません