gpt4 book ai didi

php - MySQL - 根据 IN () 返回多行

转载 作者:行者123 更新时间:2023-11-29 00:46:36 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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 上的索引。

关于php - MySQL - 根据 IN () 返回多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10303215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com