我要求你帮忙解决这个问题。
我的网站有一个搜索字段,假设用户在“Korg X 50”中写道
在我的数据库表“products”中,我有一个“名称”,其中包含“X50”和一个持有“Korg”的字段“品牌”。有没有办法使用UNION选项来获取正确的记录?
如果用户输入“Korg X-50”?
非常感谢!
利玛
答案 0 :(得分:0)
据我了解,您不需要UNION
,但需要
SELECT * FROM table1
WHERE CONCAT(field1, field2) LIKE '%your_string%'
在客户端,您可以删除用户输入中显示的your_string
中的所有字符(如空格,连字符等),但不能位于field1
或field2
中。
因此,用户输入Korg X 50
以及Korg X-50
变为KorgX50
。
答案 1 :(得分:0)
您需要获得某种形式的可搜索文本。
要么解析多个关键词的输入并分别匹配,要么尝试将它们全部附加在一起并匹配以相同方式附加的列。
你还需要一个正则表达式,或者更简单的搜索和替换,以便在比较之前的附加后删除空格和破折号。
一般来说,允许用户搜索开放式文本字符串比“我使用什么联盟”更复杂...理想情况下,您还会担心轻微的拼写错误和大小写以及关键字顺序。
您可以考虑将所有关键字从正常记录中拉出到与每种产品相关联的单独关键字列表中,然后使用该列表执行搜索。
答案 2 :(得分:0)
如果您不想解析用户输入并按原样使用,那么您将需要使用这样的查询
select * from products where concat_ws(' ',brand,name) = user_input -- or
select * from products where concat_ws(' ',brand,name) like %user_input%
但是,如果用户输入名称“Korg X-50”并且您的表包含“Korg”和“X50”,则此查询将不会返回结果,那么您需要执行其他操作才能实现此目的。您可以查看http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_soundex,但这不是一个完整的解决方案。查找ex:lucene
的文本索引库答案 3 :(得分:0)
您可以使用full-text search
SELECT brand, name, MATCH (brand,name) AGAINST ('Korg X 50') AS score
FROM products WHERE MATCH (brand,name) AGAINST ('Korg X 50')