所以我想我完全误解了 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 等
基本上,如果第一个参数中的任何值与第二个参数中的任何值匹配,我想查找记录。
这可能吗?
最佳答案
如果您的 p.fruits 列是一个 varchar(这对于这种情况并不理想,但如果是这样的话)您的查询将像
where … ( concat(',', p.fruits , ‘,’) like ‘%,1,%’
or concat(',', p.fruits , ‘,’) like ‘%,4,%’ or concat(',',p.fruits , ‘,’) like ‘%,7,%’ ) ...
这对索引不利,因为连接将禁用索引的使用.. 更好的解决方案是将列变成一个集合并像上面的迈克尔那样进行查询.. 或者您可以创建一个名为 user_fruits(fk_user_id int, fruit_id int) 的新表并在两个字段上创建唯一索引并在 user_fruits 表中进行搜索
关于php - 使用逗号分隔的字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21636054/