所以我认为我完全误解了FIND_IN_SET的工作原理
SELECT
u.*, p.*
FROM
users u
INNER JOIN profiles p ON p.user_id = u.id
WHERE
FIND_IN_SET('1,4,7', p.fruits)
这不符合我的想法。
1,4,7表示用户选择搜索的水果
p.fruits看起来像这样的1,2,3,4,5,6,7或5,6,7或1,6,7等基本上我想找到记录,如果第一个参数中的任何值与第二个参数中的任何值匹配。
这可能吗?
答案 0 :(得分:0)
如果您的p.fruits列是varchar(这种情况不理想,但如果是这样),您的查询就像
where … ( concat(',', p.fruits , ‘,’) like ‘%,1,%’
or concat(',', p.fruits , ‘,’) like ‘%,4,%’ or concat(',',p.fruits , ‘,’) like ‘%,7,%’ ) ...
这对索引不利,因为连接将禁用索引的使用。 更好的解决方案是将列转换为集合,并像上面的Michael一样进行查询。 或者您可以创建一个名为user_fruits(fk_user_id int,fruit_id int)的新表,并在两个字段上创建唯一索引并在user_fruits表中进行搜索
答案 1 :(得分:0)