mysql / php搜索标签引擎

时间:2013-01-10 10:51:23

标签: php mysql search

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

  • yamaha R1 white 2000和
  • yamaha R125 white 2005

当我发送查询时:

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

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

标题任何人都可以指定,因此标题可以是“yamaha R1 white 2005”,但也是 “优秀的条件雅马哈R1”。

知道如何解决这个问题吗?

6 个答案:

答案 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;