使用MySQL,我有两个表--一个有视频,另一个有产品。products表中的每一行都有一个名为productVideoOrder的列,它是以逗号分隔的videoIDs列表(与video表相关),按照用户放置的顺序排列。
如果关系在中间表中,我下面描述的内容会更容易,但对于此项目的其他函数,逗号分隔的列表是有意义的。
我正在尝试获取一个返回第一列: videoTitle,第二列: productName的表。有没有一种基于逗号分隔列表的左连接方法?我希望结果表允许重复的行,例如,如果两个产品列出视频在productVideoOrder中,这个表将有两个视频行,一个列出产品一个,其他列出产品两个。
我可以澄清任何需要的东西。提前感谢!
发布于 2012-04-25 01:49:35
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上的索引。
https://stackoverflow.com/questions/10303215
复制相似问题