我有一个两辆摩托车的数据库:
当我发送查询时:
SELECT * FROM bikes WHERE title LIKE '%$search%'
然后当我搜索“yamaha R125”时一切正常,但是当你搜索“yamaha R1”时 然后你会得到两个结果yamaha R1和yamaha R125。
标题任何人都可以指定,因此标题可以是“yamaha R1 white 2005”,但也是 “优秀的条件雅马哈R1”。
知道如何解决这个问题吗?
答案 0 :(得分:1)
只要您使用LIKE,MySQL就无法理解。只有两种解决方案: -
1. Either segregate model and color from that single field and keep it in separate field
2. SELECT * FROM bikes where title like 'yamaha R1%' AND title like '%2000';
答案 1 :(得分:0)
为什么要使用like子句,请使用title = $ search
SELECT * FROM bikes WHERE title='$search'
答案 2 :(得分:0)
试试这个SELECT * FROM bikes WHERE title = '$search'
如果您只想要1个结果
Like子句用于通配符搜索。如果你使用%sign,它就像通配符一样搜索
查看以下链接,了解有关String comparison
的更多信息答案 3 :(得分:0)
这里的问题是$ search值:
SELECT * FROM bikes WHERE title LIKE '%$search%'
有了这个你试图搜索等于'ANYTHING + $ search + ANYTHING'的标题
因为您正在搜索%yamaha R1%
,结果是:
yamaha R1 white 2000, yamaha R125 white 2005
这里的问题是:如果你使用'%search'
它将不起作用,因为你最后有'白色2000',你为什么不在表的另一个字段中设置颜色和数字然后像这样搜索:
SELECT * FROM bikes WHERE title LIKE '$search'
这应该返回yamaha R1的所有信息,其中一个字段是'white',另一个是'2000'
答案 4 :(得分:0)
如果这些没有帮助
Match only entire words with LIKE?
mysql SELECT LIKE must match whole words only to the variable
然后我不确定在没有更改架构,用户输入等的基本Mysql中是否可行。
如果您在专用服务器上,或者拥有一个非常好的网络主机,我碰巧知道Sphinx搜索引擎http://sphinxsearch.com/可以按您所需的方式工作。
答案 5 :(得分:0)
这就是你想要的:
SELECT * FROM bikes WHERE title REGEXP '[[:<:]]$search[[:>:]]' = 1;