0

私がやろうとしていること:マルチワード検索。ユーザーがドロップダウンからpubを選択すると、テーブル内のpubが「-」と等しくないレコードのみを取得する必要があります。

何が問題になっていますか:フィルタリングは実行されますが、最後のレコードは「-」が付いたレコードです

私が試したこと:

MySQLコンソールで次のクエリを試しました。

私の質問:

SELECT * FROM ticker where pub <> '-' AND (summary LIKE '%funny%' OR cust_exp LIKE '%funny%') OR (summary LIKE '%joke%' OR cust_exp LIKE '%joke%') OR (summary LIKE '%impact%' OR cust_exp LIKE '%impact%') ORDER BY `created` DESC

上記のクエリは、次の方法で生成されます。

マルチワード検索の構築。

$words = explode(" ",$keywords);

        $queryWords = '';
        $i=0;  

        foreach($words as $each){
            $i++;

            if ($i == 1){
                $queryWords.=" (summary LIKE '%$each%' OR cust_exp LIKE '%$each%') ";   
            }
            else{
                $queryWords.=" OR (summary LIKE '%$each%' OR cust_exp LIKE '%$each%') ";    
            }
          }

クエリコードのスニペット。

elseif ($ticket_type == 'Pub'){
                if ($status == 'All'){
                        if (empty($product)){
                            $query="SELECT * FROM ticker where pub <> '-' AND".$queryWords."ORDER BY `$order_by` DESC";
                        }

編集:サンプルの検索文字列は「面白いジョークの影響」です

4

3 に答える 3

1

これを試して:

SELECT * FROM ticker 
WHERE TRIM(pub) != '-' 
  AND (
    (summary LIKE '%funny%' OR cust_exp LIKE '%funny%') 
    OR
    (summary LIKE '%joke%' OR cust_exp LIKE '%joke%')
    OR 
    (summary LIKE '%impact%' OR cust_exp LIKE '%impact%')
  ) 
ORDER BY `created` DESC
于 2013-01-22T09:08:26.340 に答える
0

$Where[] = "パブ <> '-'";

$words = expand(" ", $keywords);

foreach($words as $ThisWord)$WhereWord[] = "summary LIKE '%{$ThisWord}%' OR cast_exp LIKE '%{$ThisWord}%'";

$Where[] = "(".implode(" OR ", $WhereWord).")";

$queryWords = "SELECT * FROM MyTable WHERE ".implode(" AND ", $Where)." ORDER BY '{$order_by}' DESC";

$queryWords を印刷します。

于 2013-01-22T09:15:19.467 に答える
0

クエリを確認してください

AND".$queryWords."ORDER 「AND」と「ORDER BY」の間にスペースを入れないでください

于 2013-01-22T09:06:25.080 に答える