使用MySQL,我有两个表-一个是视频表,另一个是产品表。products表中的每一行都有一个名为productVideoOrder的列,这是一个用逗号分隔的videoid列表(与视频表相关),按用户放置它们的顺序排列。
如果关系在中间表中,我下面描述的将更容易,但是对于这个项目的其他函数,逗号分隔的列表是有意义的。
我试图得到一个返回列1:videoTitle、列2:productName的表。是否有基于逗号分隔列表的左联接方法?我希望results表允许重复的行,例如,如果两个product列出视频,一个在productVideoOrder中,那么这个表将有两个用于该视频的行,一个列出product one,另一个列出product two。
我可以澄清任何需要的东西。提前谢谢!
最佳答案
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
上的索引。