搜索查询,将字符串中的特定单词与mysql中另一个字符串的值进行比较

搜索查询,将字符串中的特定单词与mysql中另一个字符串的值进行比较,mysql,Mysql,我正在制作一个搜索模块,在其中我需要搜索与其他用户详细信息匹配的用户详细信息,以便比较用户详细信息。对于年龄、性别等细节,我使用了“%search\u term%”等,并且能够得到我想要的结果,但我无法查询用户1讲英语、法语、西班牙语等细节,因此它像用逗号分隔的单词一样存储在数据库中,作为相同的标记。假设其他用户只有一种共同语言拉丁语、印地语、法语即法语,那么如何根据用户1的详细信息过滤该用户,这样他/她仍然有一些共同点。以下查询用于正常值,如年龄 select * from users_pro

我正在制作一个搜索模块,在其中我需要搜索与其他用户详细信息匹配的用户详细信息,以便比较用户详细信息。对于年龄、
性别
等细节,我使用了“%search\u term%”等
,并且能够得到我想要的结果,但我无法查询用户1讲英语、法语、西班牙语等细节,因此它像用逗号分隔的单词一样存储在数据库中,作为相同的标记。假设其他用户只有一种共同语言
拉丁语、印地语、法语
即法语,那么如何根据用户1的详细信息过滤该用户,这样他/她仍然有一些共同点。以下查询用于正常值,如年龄

select * from users_profile 
where age like '%$search_term%' 
order by created_time DESC

如何使用
在其中进行查询并获得结果?

您可以进行自连接,然后用管道替换其中一个中的逗号,然后将该正则表达式与rlike一起使用。表现可能很糟糕

select users_profile.*, users_profile2.id as other_id, 
  users_profile2.language as other_lang from users_profile
  inner join users_profile as users_profile2 on
    users_profile.language rlike 
      replace(users_profile2.language,",","|") 
    and users_profile.id != users_profile2.id;
你可以自己看看:

在一个字段中存储非标量数据(如项目列表)是非常糟糕的做法。相反,您应该创建第二个表(例如,
user\u language(user\u id,language)
)。你的问题很容易解决。谢谢你的sugestion@YaK,但是我正在处理的整个系统默认都有这个系统。我正在制作一个新的搜索模块。你能帮我完成我正在做的搜索结果查询吗?这个查询目前还不完整。至少可以说,MySQL在处理字符串方面是不容易的。您最好在应用程序层拆分分隔的字符串,然后根据此列表生成SQL查询。可以只在MySQL中实现,但我有一种奇怪的感觉,它看起来非常难看:)非常感谢@ShawnBalestracci,这真的很有效,感谢YaK的建议,注意法语和法裔加拿大人等语言可以匹配,这在您的情况下可能不是问题,但如果要在其他地方使用,可能需要进行调整。