使用“LIKE”匹配mysql查询中的多个单词

时间:2013-09-29 06:39:31

标签: php mysql search full-text-search

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

我正在使用此查询

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

其中$search_string仅包含用户输入

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

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

  

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

答案 2 :(得分:0)

最后只使用一个“%”。像

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

这将搜索“articlex”和“articley”

答案 3 :(得分:0)

分隔符// CREATE PROCEDURE proc_advancesearch(IN p_data VARCHAR(80),IN act_mode VARCHAR(10))

开始

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

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

选择prodtmappid,ProId,ProductName,FinalPrice,fn_image(prodtmappid)作为来自tblproductmapforlisting的图片  ProStatus ='A'的地方  和(  concat(ProductName,'',brandname,'',CatName)喜欢(p_s_data)

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

答案 4 :(得分:-1)

您可以将REGEX用于此目的.....或者如果您想要多字搜索,则需要按空格分解搜索字符串,然后使用LIKE从表中搜索此字符串

       if you search "articlex articley" then it will search whole word in LIKE operator