[英]mysql/php search tag engine
我有两个摩托车的数据库:
当我发送查询时:
SELECT * FROM bikes WHERE title LIKE '%$search%'
然后,当我搜索“ yamaha R125”时一切正常,但是当您搜索“ yamaha R1”时,您将得到两个结果yamaha R1和yamaha R125。
任何人都可以随意指定标题,因此标题可以是“ yamaha R1 white 2005”,也可以是“条件优越的yamaha R1”。
知道如何解决吗?
只要您正在使用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';
为什么要使用like子句,请使用title = $ search
SELECT * FROM bikes WHERE title='$search'
试试这个SELECT * FROM bikes WHERE title = '$search'
如果只想要1个结果
Like子句用于通配符搜索。如果使用%符号,则像通配符一样搜索
检查以下链接以了解有关字符串比较的更多信息
这里的问题是$ search值:
SELECT * FROM bikes WHERE title LIKE '%$search%'
与此相关的是,您尝试查找等于“ ANYTHING + $ search + ANYTHING”的标题
由于您正在搜索%yamaha R1%
因此结果是:
yamaha R1 white 2000, yamaha R125 white 2005
这里的问题是:如果您使用'%search'
,它将不起作用,导致结尾处是'white 2000',为什么不在表格的另一个字段中设置颜色和数字,然后进行搜索像这样:
SELECT * FROM bikes WHERE title LIKE '$search'
这应该返回yamaha R1的所有信息,其中一个是颜色“ white”,另一个是数字“ 2000”
如果这些没有帮助
mysql SELECT LIKE必须将整个单词仅与变量匹配
那么我不确定在基本的Mysql中不更改架构,用户输入等是可能的。
如果您在专用服务器上,或者拥有非常好的Web主机,我碰巧知道Sphinx搜索引擎http://sphinxsearch.com/可以按照您要求的方式工作。
这就是你想要的:
SELECT * FROM bikes WHERE title REGEXP '[[:<:]]$search[[:>:]]' = 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.