【问题标题】:mysql/php search tag enginemysql/php 搜索标签引擎
【发布时间】:2013-01-10 10:51:22
【问题描述】:

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

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

当我发送查询时:

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

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

任何人都可以根据需要指定标题,因此标题可以是“yamaha R1 white 2005”,但也可以是 “状态极佳的雅马哈 R1”。

知道怎么解决吗?

【问题讨论】:

  • 您在搜索 yamaha R1 时是否只希望 yamaha R1 作为结果?
  • 是的,我只想要 yamaha R1 的结果,在这种情况下只有一个
  • 所以请在下面查看我的答案
  • 那么为什么不在查询后添加空格LIKE '%$search %'
  • 它不起作用,例如让我们说搜索:“white yamaha r1”

标签: php mysql search


【解决方案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';

【讨论】:

  • 如果人们只指定型号和自行车年份,这将起作用,但是当有人键入“品牌知道 yamaha R1 2010 一个所有者”时,它就不起作用了
【解决方案2】:

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

SELECT * FROM bikes WHERE title='$search'

【讨论】:

  • 但是当我输入“yamaha R1”时标题看起来像“yahama R1 white 2000”而不是完整标题才刚刚开始仍然可以工作吗?
【解决方案3】:

这里的问题是 $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”

【讨论】:

  • 基本上任何人都可以根据需要键入的标题,因此可以是“品牌知道 yamaha R1 2010 一个所有者”,然后更复杂
【解决方案4】:

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

如果你只想要 1 个结果

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

查看以下链接了解更多关于String comparison的信息

【讨论】:

    【解决方案5】:

    如果这些没有帮助

    Match only entire words with LIKE?

    mysql SELECT LIKE must match whole words only to the variable

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

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

    【讨论】:

      【解决方案6】:

      这就是你想要的:

      SELECT * FROM bikes WHERE  title REGEXP '[[:<:]]$search[[:>:]]' = 1;
      

      【讨论】:

      • mysql_query("SELECT * FROM bikes WHERE title REGEXP '[[:<:>:]]' = 1;");给出“警告:mysql_fetch_array() 期望参数 1 是资源,给出的布尔值”
      猜你喜欢
      • 2012-06-04
      • 2013-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多