我正在使用搜索框来查找数据库中的条目。一列包含要查找的事物的标题/名称。然后我有第二列,它给出了适用的简短描述(通常很少的话)
我正在尝试搜索(使用搜索框)以匹配一个甚至两个单元格的组合。这可能吗,如果是,如何?
您可以在下面看到我的代码,其中显示了我试图实现的目标,但无论如何,让我稍微说明一下:
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}%'";
添加一个FULLTEXT
(请参阅此处的文档)索引到 title
和 description
。
ALTER TABLE items
ADD FULLTEXT INDEX items_index
(title, description);
这将允许您搜索这些列。
然后构建如下所示的查询:
SELECT *
FROM items
WHERE MATCH(title, description)
AGAINST ('SEARCH KEYWORD HERE' IN BOOLEAN MODE);
我不知道
这是否会对您有所帮助,但是
"SELECT * FROM items WHERE CONCAT(title, '', description) LIKE '%{$search}%'";
看起来很简单,除非我错过了什么:
$queryString = "SELECT * FROM items WHERE title LIKE '%{$search}%' OR description LIKE '%{$search}%'";
你试过这个吗.....?
SELECT * FROM items WHERE `title` LIKE '%{$search}%' OR `description` LIKE '%{$search}%'