如何根据两个单元格值进行搜索

时间:2013-11-06 23:00:07

标签: php mysql

我正在使用搜索框查找数据库中的条目。 一列包含要查找的内容的标题/名称。 然后我有第二列,给出了适用的简短描述(通常很少的单词)

我正在尝试搜索(使用搜索框)以匹配组合的一个或甚至两个单元格。这是可能的,如果是的话,怎么样?

你可以在下面看到我的代码,它显示了我尝试实现的目标,但无论如何,让我来说明一点:

Example:
Database.title = "towel"
Database.description = "red, small"

Now, if I type into my search box "tow%red" I want to find the item.

它显然没有找到它,因为标题不包含“红色”。但是如果我只搜索“毛巾”,它可能会根据不同的尺寸,颜色或其他属性向我显示不同的项目,并且列表变得太长。 当然我也希望能够简单地搜索“%red%small%并且仍能找到它,或者只是搜索”毛巾“。

这是我执行搜索的PHP代码:

if ( !isset($_REQUEST['term']) ) {
    exit;
}
$search = mysql_real_escape_string($_REQUEST['term']);
$queryString = "SELECT * FROM items WHERE title+description LIKE '%{$search}%'";
$query = mysql_query($queryString);
$data = array();
if ( $query && mysql_num_rows($query) )
{
    while( $row = mysql_fetch_array($query, MYSQL_ASSOC) )
    {
        $label = $row['title'];
        if ($row['description']) {
            $label .= ' — '. $row['description'];
        }
        $data[] = array(
            'label' => $label,
            'value' => $row['code']
        );
    }
}
echo json_encode($data);
flush();

我知道上面的内容不会起作用,我只是这样说清楚我想要的东西。 工作代码包含此行:

$queryString = "SELECT * FROM items WHERE title LIKE '%{$search}%'";

4 个答案:

答案 0 :(得分:3)

FULLTEXTtitle添加description (see documentation here)索引。

ALTER TABLE items
ADD FULLTEXT INDEX items_index
(title, description);

这将让您搜索这些列。

然后构建一个这样的查询:

SELECT * 
FROM items
WHERE MATCH(title, description) 
AGAINST ('SEARCH KEYWORD HERE' IN BOOLEAN MODE);

答案 1 :(得分:2)

我不知道这对你有帮助吗

"SELECT * FROM items WHERE CONCAT(title, '', description) LIKE '%{$search}%'";

答案 2 :(得分:0)

看起来很简单,除非我遗漏了一些东西:

$queryString = "SELECT * FROM items WHERE title LIKE '%{$search}%' OR description LIKE '%{$search}%'";

答案 3 :(得分:0)

你试过这个吗?

SELECT * FROM items WHERE `title` LIKE '%{$search}%' OR `description` LIKE '%{$search}%'