繁体   English   中英

mysql / php搜索标签引擎

[英]mysql/php search tag engine

我有两个摩托车的数据库:

  • 雅马哈R1白色2000和
  • 雅马哈R125白色2005

当我发送查询时:

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”

如果这些没有帮助

仅将整个单词与LIKE匹配吗?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM