1

MySQL を使用して、2 つのテーブルを用意しました。1 つはビデオ、もう 1 つは製品です。products テーブルの各行には、productVideoOrder という名前の列があります。これは、ユーザーが配置した順序での (video テーブルに関連する) videoID のカンマ区切りのリストです。

以下で説明することは、リレーションシップが中間テーブルにある場合に簡単になりますが、このプロジェクトの他の機能については、カンマ区切りのリストが理にかなっています。

列 1: videoTitle、列 2: productName を返すテーブルを取得しようとしています。コンマ区切りリストに基づいて左結合する方法はありますか? 結果テーブルで行の繰り返しを許可したいと思います。たとえば、productVideoOrder で 2 つの製品がビデオ 1 をリストしている場合、このテーブルにはそのビデオに対して 2 つの行があり、1 つのリストには製品 1 がリストされ、もう 1 つのリストには製品 2 がリストされます。

必要なことは何でも明確にすることができます。前もって感謝します!

4

1 に答える 1

1
SELECT  p.name, v.title
FROM    product p
LEFT JOIN
        video v
ON      FIND_IN_SET(v.id, p.productVideoOrder)

これでは速くなりません。

製品に割り当てることができるビデオの数に合理的な制限がある場合は、これを使用してみてください:

SELECT  p.name, v.title
FROM    product p
CROSS JOIN
        (
        SELECT  1 AS n
        UNION ALL
        SELECT  2 AS n
        UNION ALL
        SELECT  3 AS n -- add more if needed
        )
LEFT JOIN
        video v
ON      v.id = SUBSTRING_INDEX(SUBSTRING_INDEX(productVideoOrder, ',', n), ',', -1)
        AND SUBSTRING_INDEX(SUBSTRING_INDEX(productVideoOrder, ',', n), ',', -1) <> SUBSTRING_INDEX(SUBSTRING_INDEX(productVideoOrder, ',', n - 1), ',', -1)

これは のインデックスを使用しますv.id

于 2012-04-24T17:49:35.113 に答える