【问题标题】:Find string in different word order in MySQL query在 MySQL 查询中以不同的词序查找字符串
【发布时间】:2016-12-12 11:08:53
【问题描述】:

这可能是一个非常基本的问题,但我希望有人能够提供帮助吗?

假设我有一个 MySQL 表,其中包含一个名为 exampleString 的字段,它是一个文本字段

在一条记录中,字段 exampleString 包含以下文本:

“苹果橘子梨”

现在,我想做的(PHP)如下:

  1. 执行查询以搜索“apples oranges pears” - 我可以这样做,没问题。

  2. 执行查询以搜索“oranges apples pears”,它将返回包含字符串“apples oranges pears”的记录 - 我不知道该怎么做。 (注意:如果查询搜索字符串只是“oranges pears”,则不应返回记录)。

我还希望能够使查询不区分大小写,但我也不知道该怎么做(虽然我还没有搜索过)。

【问题讨论】:

  • 你不能在php的循环中使用AND查询?示例:$string = 'apples oranges pears'; $explode = explode (' ',$string); 和循环:foreach($explode as $value) {$query .= 'AND your_field LIKE "%'$value'%"}; 如果您需要,我可以回答并解释:)
  • 这不是(我的)SQL 擅长的。如果您想为此使用 RDBMS,请考虑规范化您的数据。如果做不到这一点,请考虑查看 FULLTEXT 索引。否则,请考虑为此任务使用应用程序级代码(我的偏好)。
  • 感谢您的回复,非常感谢。我认为 SQL 在这方面不是很好,但想检查一下,你已经确认了 :)

标签: php mysql


【解决方案1】:

您可以对输入中的每个单词使用 PHP for 循环并进行 SQL 查询。

在 MySQL 中,您可以使用 LIKE "%[your_string]%" 搜索字符串内容 [your_string] http://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html

因此,如果您需要匹配“apples oranges pears”和“apples pears oranges”,您需要执行以下操作:

LIKE "%apples%" AND LIKE "%oranges%" AND LIKE "%pears%"

所以你发现字符串内容 apples AND oranges AND pears 没有顺序重要性

现在在 php 中,the explode function 转换数组中的字符串

因此,最终代码示例(根据您的情况调整干净并保护它。测试您的变量等)

$string = 'apples oranges pears';

$explode = explode(' ', $string);

$whereString = '';
foreach ($explode as $key => $value) {
    $whereString .= ' AND [your_field] LIKE "%'.$value.'%"';
}

echo $whereString;

【讨论】:

  • 非常受赞赏的 Xenofexs - 我想我必须做这样的事情,但不是 MySQL 专家,我想我会检查它是否可以直接在查询中完成。
  • 很高兴:)。如果它解决了你的问题,你能检查一下吗?
猜你喜欢
  • 2021-04-01
  • 2013-07-05
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 2015-12-05
相关资源
最近更新 更多