0

我的应用程序允许搜索文章。因此,当用户输入字符串“articlex”时,会显示查询和结果,但是当输入多个单词“articlex articley”时,查询不会显示任何结果。

目前我正在使用这个查询

$querySub = 'SELECT * FROM table WHERE (col1 LIKE "%'.$search_string.'%") OR (col2 LIKE "%'.$search_string.'%") OR (col3 LIKE "%'.$search_string.'%")';

其中$search_string仅包含用户输入

如何使查询也适用于多个单词?

4

5 回答 5

1

示例PDO

/* Assume $pdo is already prepared as PDO instance. */

// search query split by spaces
$user_input = 'foo bar baz';

// create string for PDO::prepare()
$sql = 'SELECT * FROM testTable WHERE ';
$wheres = $values = array();
foreach (array_filter(explode(' ', $user_input), 'strlen') as $keyword) {
    $wheres[] = 'col1 LIKE ?';
    $values[] = '%' . addcslashes($keyword, '%_\\') . '%'; // this is escape for LIKE search
}
$sql .= $wheres ? implode(' OR ', $wheres) : '1';

// bind values and execute
$stmt = $pdo->prepare($sql);
$stmt->execute($values);

mysql_**函数示例(已弃用)

/* Assume $link is already prepared as MySQL resource. */

// search query split by spaces
$user_input = 'foo bar baz';

// create string for mysql_auery()
$sql = 'SELECT * FROM testTable WHERE ';
foreach (array_filter(explode(' ', $user_input), 'strlen') as $keyword) {
    $wheres[] = 'col1 LIKE ' . mysql_real_escape_string(
        '%' . addcslashes($keyword, '%_\\') . '%',
        $link
    );
}
$sql .= !empty($wheres) ? implode(' OR ', $wheres) : '1';

// execute
$result = mysql_query($sql, $link);
于 2013-09-29T07:11:58.463 回答
0

在使用变量进行类似查询时,您可以使用

从关键字 LIKE '%{$to_be_searched}%' 的表中选择 *

于 2013-09-29T06:53:25.380 回答
0

最后只使用一个“%”。喜欢

$querySub = SELECT * FROM table WHERE (col1 LIKE '$search_string%'");

这将搜索“articlex”和“articley”

于 2013-09-29T07:05:57.600 回答
0

分隔符 // 创建过程proc_advancesearch(IN p_dataVARCHAR(80) , IN act_modeVARCHAR(10))

开始

声明 p_s_data varchar(250); SET sql_mode='NO_ENGINE_SUBSTITUTION';

设置 p_s_data=REPLACE(p_data,'','%'); 设置 p_s_data=concat('%',p_s_data,'%');

从 tblproductmapforlisting 中选择 prodtmappid、ProId、ProductName、FinalPrice、fn_image(prodtmappid) 作为图像,其中 ProStatus='A' 和 ( concat(ProductName,' ',brandname,' ',CatName) like (p_s_data)

)

或 ProductName 如 concat(p_data,'%')) group by tblproductmapforlisting.ProId order by propriority asc ;

结尾

于 2015-10-06T09:35:48.893 回答
-1

您可以为此目的使用 REGEXP .....或者,如果您想要多个单词搜索,那么您需要按空格展开搜索字符串,然后使用 LIKE 从表中搜索此字符串

       if you search "articlex articley" then it will search whole word in LIKE operator
于 2013-09-29T06:50:30.203 回答