使用MySQL,我有两张桌子 - 一张带有视频,另一张带有产品。 products表中的每一行都有一个名为productVideoOrder的列,它是一个逗号分隔的视频ID列表(与视频表相关),按用户放置它们的顺序排列。
如果关系在中间表中,我在下面描述的内容会更容易,但对于此项目的其他功能,逗号分隔列表是有意义的。
我正在尝试获取一个返回第一列的表:videoTitle,第二列:productName。有没有办法根据逗号分隔列表离开连接?我希望结果表允许重复行,例如,如果两个产品列出了productVideoOrder中的一个视频,那么该表将有两行用于该视频,一个列出产品一,另一个列出产品二。
我可以澄清所需的一切。提前谢谢!
答案 0 :(得分: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
上的索引。