1

我正在尝试在 php 和 mysql 中创建一个搜索引擎。搜索引擎应该能够接受多个值并显示所有可能的结果,我检查了这个线程php/mysql search for multiple values,但我需要在所在的地方使用全局变量LIKE '$search%'。这就是我的 sql 语句的样子,

SELECT name FROM product WHERE name LIKE '%$search%

变量搜索已正确声明,现在当我专门搜索时一切正常,例如金链将显示金链。但是当我一起搜索另一个名称时,例如金链衬衫,其中衬衫是另一个产品的名称,结果未显示。我应该如何更改我的 sql 命令以从搜索的多个值中获取多个结果?很抱歉,我之前没有告诉我被要求在 3 层编程中做这件事。

4

4 回答 4

2

这里有一篇不错的文章,它将向您介绍如何使用 PHP 搜索 MySQL,但基本上您要做的是将搜索短语分成几部分,然后在 MySQL 查询中使用它们。例如:

<?php
  $search = 'Gold Chain Shirt';
  $bits = explode(' ', $search);

  $sql = "SELECT name FROM product WHERE name LIKE '%" . implode("%' OR name LIKE '%", $bits) . "%'";

以上将生成此查询:

SELECT name FROM product WHERE name LIKE '%Gold%' OR name LIKE '%Chain%' OR name LIKE '%Shirt%'
于 2013-03-08T08:36:47.323 回答
0

您确实需要查看FULLTEXT索引,然后阅读有关FULLTEXT Query Expressions的信息。

于 2013-03-08T08:34:35.750 回答
0

如果我理解正确,您想搜索所有具有“金链”或“衬衫”价值的物品。在这种情况下,当您将问题标记为“php”时,您可以通过更改$search整个 WHERE 子句来做到这一点。我这样做(示例显示不同的条件来解释这个想法):

$search_array=array('name LIKE "%Gold Chain%"', 'price > 5');
$where=implode($search_array,' OR '); // you might wish ' AND '

some_function_to_query('SELECT name FROM product WHERE '.$where);
于 2013-03-08T08:35:11.117 回答
0

您可以通过执行以下操作来改进搜索: '%$search' 仅从字符串的开头进行搜索以获得更多结果。

比,如果你想从一个句子中搜索每个单词,你可以这样做:

$search = 'Gold Chain Shirt';
$searches = explode(' ', $search);
$query = "SELECT * FROM product WHERE name ";
foreach($searches as $word) {
    $query .= "LIKE '%{$word}' OR ";
}
于 2013-03-08T08:37:59.830 回答