0

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

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

当我发送查询时:

SELECT * FROM bikes WHERE title LIKE '%$search%'

然后,当我搜索“yamaha R125”时,一切正常,但当您搜索“yamaha R1”时,您将得到两个结果 yamaha R1 和 yamaha R125。

任何人都可以根据需要指定标题,因此标题可以是“yamaha R1 white 2005”,也可以是“excellent condition yamaha R1”。

知道如何解决吗?

4

6 回答 6

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';
于 2013-01-10T11:12:27.547 回答
0

如果这些没有帮助

仅将整个单词与 LIKE 匹配?

mysql SELECT LIKE 必须仅将整个单词与变量匹配

那么我不确定是否可以在基本的 Mysql 中不更改架构、用户输入等。

如果您在专用服务器上,或者有一个非常好的网络主机,我碰巧知道 Sphinx 搜索引擎http://sphinxsearch.com/可以按照您需要的方式工作。

于 2013-01-10T11:54:07.460 回答
0

为什么要使用 like 子句,请使用 title=$search

SELECT * FROM bikes WHERE title='$search'
于 2013-01-10T10:53:58.743 回答
0

尝试这个SELECT * FROM bikes WHERE title = '$search'

如果您只想要 1 个结果

Like 子句用于通配符搜索。如果使用 % 符号,则搜索通配符

检查以下链接以了解有关 字符串比较的更多信息

于 2013-01-10T10:54:24.150 回答
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 的所有信息,其中一个是颜色“白色”,另一个是数字“2000”

于 2013-01-10T10:58:42.213 回答
0

这就是你想要的:

SELECT * FROM bikes WHERE  title REGEXP '[[:<:]]$search[[:>:]]' = 1;
于 2013-01-10T15:54:09.700 回答