【问题标题】:Return search results matching multiple query tags?返回匹配多个查询标签的搜索结果?
【发布时间】:2017-02-28 18:09:33
【问题描述】:

我正在使用基于 Laravel 的 OctoberCMS

我有一个 html 搜索字段,其中查询字符串是用 php 解析的。

Laravel 使用 MySQL WHERE LIKE 根据 url tag 参数返回数据库结果。

它适用于 1 个标签,但如何返回匹配多个标签的结果,以逗号或空格分隔?

HTML5 搜索输入

<form action="/search">
  <input type="search" name="tags" multiple>
  <button type="submit">search</button>
</form>

单标签搜索

localhost/search?tags=galaxy

多标签搜索

逗号 localhost/search?tags=galaxy%2C+stars%2C+universe
空间 localhost/search?tags=galaxy+stars+universe

这应该返回在数据库表的标签列中匹配的任何标签。

问题在于它将查询视为galaxy AND stars AND universe 而不是单个标签:galaxystarsuniverse

搜索结果

$query_string = $tags = '';

$query_string = getenv('QUERY_STRING');

// Return search results matching query string
return $query->where('tags', 'like', "%$tags%");

$query 是 OctoberCMS 的一部分。

示例

问题

【问题讨论】:

  • 我不明白:“任何”还是“全部”?标签如何存储在数据库中? $query 是什么?你的问题到底是什么?
  • @PaulSpiegel 现在如果我输入“galaxy, stars”。它将查询视为“galaxy + stars”而不是单个标签。我会改写。标签存储在表“画廊”和列“标签”中。图像位于“名称”列中。我正在使用 OctoberCMS,它需要 $query,作为 Query Builder 插件的一部分。我会更新问题。
  • 您可以使用explode() function 来拆分字符串。另请注意,'%$tags%' 不会像您预期的那样工作。您应该使用双引号:"%$tags%"。我无能为力 - 没有足够的信息(表格、关系、..)。
  • @PaulSpiegel 如果我将 $tags 分解为一个数组,那么我如何让 mysql 在该列中搜索 $tags 数组中的匹配项?我还用另一张图片更新了这个问题。

标签: php html mysql laravel laravel-5


【解决方案1】:

令人困惑,。尝试逻辑或在表格列中查找值可能会有所帮助,如果您从网页中首先获取元标记,例如谷歌使用关键字搜索结果

【讨论】:

  • 我面临的问题是$tags变量变成了“galaxy, stars, universe”并且不知道如何使用mysql将其分离成单独的单词来使用OR。
  • 你是在mysql数据库中搜索吧?因此,在表中创建一个单独的列,您将在其中存储关键字,然后使用搜索查询 select * from DB.table where keyword= $keyword
  • 搜索多个标签时,查询中的多个关键字变成单个关键字变量$tags。所有标签连接在一起。现在在搜索数据库时,它会尝试匹配加入的关键字并返回空。
猜你喜欢
  • 2021-08-15
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2021-02-10
  • 2015-10-03
相关资源
最近更新 更多