搜索查询,将字符串中的特定单词与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的建议,注意法语和法裔加拿大人等语言可以匹配,这在您的情况下可能不是问题,但如果要在其他地方使用,可能需要进行调整。