1

部分的な単語を検索できるように拡張したいエントリのタイトルを検索する単純なmysql検索機能があります...

たとえば、検索するとしましょう: キャンセル

現在、タイトルにキャンセルという単語が含まれているものはすべて返されます。しかし理想的には、タイトルにキャンセルという単語が含まれているものも返す必要があります。

これが私がこれまでに持っているものです...

function search_title_body($q){
    $q = '+' . $q;
    $q = str_replace(' ', '+', $q);
    $q = "+(".$q.")";

    $query = "SELECT *,
              MATCH(title) AGAINST('$q' IN BOOLEAN MODE) AS score
              FROM results
              WHERE (MATCH(title) AGAINST('$q' IN BOOLEAN MODE))
              AND (published = 1)
              ORDER BY score DESC";

    $query = $this->db->query($query);

    $results = array();


    foreach ($query->result() as $row){
        $results[] = $row;
    }

    return $results;
} 

誰かが私を正しい方向に向けることができますか? 助けてくれてありがとう:)

4

3 に答える 3

0

どうですか

SELECT *,
MATCH(title) AGAINST('$q' IN BOOLEAN MODE) AS score
FROM results
WHERE title LIKE '%$q%'
AND published = 1
ORDER BY score DESC
于 2012-09-11T17:48:58.587 に答える
0

あなたが探しているのはLIKEまたはILIKE関数だと思います

$q = "somestring";
 $query = "SELECT *,              
          FROM results
          WHERE title ILIKE '%$q%'
          AND (published = 1)
          ORDER BY score DESC";

また、なぜ一致列を作成するのか、num_rowsはヒット数を示します。

于 2012-09-11T17:49:32.010 に答える
0

likeステートメントを使用して$qを作成し、このようなクエリを取得できます。

SELECT * FROM results
WHERE title like '%cancel%' OR title like '%otherword%'
AND (published = 1)
ORDER BY score DESC
于 2012-09-11T17:49:53.117 に答える