php - 使用逗号分隔的字符串搜索

标签 php mysql

所以我想我完全误解了 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/

相关文章:

javascript - 允许发送多封电子邮件并发送给所有人的表单

php - 如何从没有 ID 的 JQuery 函数提交表单

mysql - 搜索两个表中的列: ERROR 1066 (42000): Not unique table/alias

php - 如何在 sql 权限表中使用正则表达式

php - 显示来自内部联接的名称

php - Cakephp 类注册表::初始化

php - 通过php mysql搜索以二进制形式存储的IP地址

php - 和贾克斯有什么关系?

mysql - 0.1M流量如何提升数据库性能

java - 如何将 hibernate 时间戳映射到 MySQL BIGINT?