1

使用 MySQL,我有两张表——一张是视频,另一张是产品。products 表中的每一行都有一个名为 productVideoOrder 的列,它是一个以逗号分隔的 videoID 列表(与 video 表相关),按用户放置它们的顺序排列。

如果关系在中间表中,我在下面描述的内容会更容易,但对于该项目的其他功能,逗号分隔的列表是有意义的。

我正在尝试获取一个返回第一列的表:videoTitle,第二列:productName。有没有一种基于逗号分隔列表的左连接方式?我希望结果表允许重复行,例如,如果两个产品在 productVideoOrder 中列出了一个视频,则该表将有两行用于该视频,一个列出产品一个,另一个列出产品二。

我可以澄清任何需要的东西。提前致谢!

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 回答