Построение поискового запроса MySQL с использованием LIKE в PHP - PullRequest
0 голосов
/ 07 апреля 2011

Я делаю поиск PHP MySQL, пользовательский может быть типа что-то вроде word или word1 word2 или word1 word2 word3 ... Мне нужно получить окончательный запрос типа

$qry = "SELECT title,content,date 
FROM articles WHERE 
(title like '%$word1%' and title '%$word2%') 
OR 
(content like '%$word1%' and content title '%$word2%')"
OR
(title like '%$word1%' and content title '%$word2%')
OR
(title like '%$word2%' and content title '%$word1%'); // make sure custom type words all match in database column title and content, maybe only '%$word1%', or maybe multi words '%$word1%', '%$word2%', '%$word3%'...

Я используюнекоторый код ниже, но он не может достичь моего запроса.как сделать это правильно?Спасибо.

$qry = "SELECT title,content,date FROM articles";
if($_REQUEST['search']!=""){
    $searchText = $_REQUEST['search'];
    $words = preg_split("/\s+/",$searchText); 
    $uniqueWords = array_keys(array_flip($words)); 
    $parts = '';
    foreach($uniqueWords as $word){     
    $parts[] = " content like '%$word%' ";
    } 
    $where = implode(" AND ", $parts);
    foreach($uniqueWords as $word){     
    $parts[] = " title like '%$word%' ";
    } 
    $where1 = implode(" AND ", $parts);
    foreach($uniqueWords as $word){     
    $parts[] = " title like '%$word%' OR content like '%$word%' ";
    } 
    $where2 = implode(" AND ", $parts);
    $qry .=" WHERE $where OR $where1 OR $where2 Order By date DESC ";
}

1 Ответ

2 голосов
/ 07 апреля 2011

Я не уверен, что именно вам нужно (вы хотите сопоставить какое-либо ключевое слово в заголовке или содержании или сопоставить оба ключевых слова с обоими столбцами ...?) Но как насчет этого:

$keywords = explode(' ',mysql_real_escape_string($_REQUEST['search']));
$qry = "SELECT title,content,date FROM articles WHERE (";
$qry2 = '';
foreach($keywords as $n => $word)
{
    $qry2 .= " title LIKE '%$word%' OR content LIKE '%$word%' OR";
}
$qry .= trim($qry2, 'OR');
$qry .= ") ORDER BY title";

Не проверял это, но, кажется, нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...