【问题标题】:Php search with multiple wordsphp搜索多个单词
【发布时间】:2017-09-23 16:06:27
【问题描述】:

所以,我定义了一个从 DB 中搜索并将结果传递给 ajax 的函数。

function do_search() {
    $search=$_POST['dname'];
    global $wpdb;
    $sql="SELECT * FROM employee WHERE `firstname` LIKE '%{$search}%' OR `lastname` LIKE '%{$search}%' OR  `department`LIKE '%{$search}%' OR `phone` LIKE '%{$search}%' OR `job_title` LIKE '%{$search}%' OR `cell_phone` LIKE '%{$search}%' OR `image`LIKE '%{$search}%' OR `email` LIKE '%{$search}%' OR `address` LIKE '%{$search}%' OR `room` LIKE '%{$search}%';";
    $result2=$wpdb->get_results($sql);
    echo json_encode($result2);
    wp_die();
}

但我的问题是它只能用一个词。我尝试用“”来爆炸 $_POST 值。然后进行 foreach 并构建多个查询,例如 $query[i] 但我无法得到任何响应?

在回显结果时如何实现 - 然后回显结果,其中每个单词都与这些字段条目进行比较?

【问题讨论】:

  • 不清楚你在问什么
  • 我现在只能回显单个单词搜索。多词查询什么都没有。

标签: php mysql wordpress


【解决方案1】:

您可以使用简单的“技巧”,而不是爆炸搜索查询并产生大量条件:

$search = $_POST['dname'];
$search = str_replace(' ', '%', $search);

$query = "SELECT * FROM yourTable WHERE col1 LIKE '%{$search}%' OR col2 LIKE '%{$search}%' ";

不要忘记转义输入或参数化查询。

【讨论】:

    【解决方案2】:

    爆炸和多个查询条件是这里唯一的选择。

    说这样的 $search 变量会使其在同一列中搜索多个单词是错误的。它不会。因为用百分比通配符替换空格的结果将类似于 %word1%word2% 使用上面的代码,并且多个百分比将使它在该特定列中搜索两个单词而不是单个单词,因此在 SQL 中将多个百分比通配符视为AND 意味着两者都应该满足才能被选中,而我认为我们正在尝试创建一个多词查询,将其视为 OR 意味着 word1 或 word2 存在,应该选择记录(因此需要爆炸和尽可能多的喜欢用户输入了很多单词),没有这个用百分比替换空格的技巧,不会在多个单词中起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 2017-04-12
      • 2014-11-18
      相关资源
      最近更新 更多