簡體   English   中英

如何返回數組中所有值都存在的行

[英]How to return a row where all values in an array exists

我有一個存儲值的數據庫,如下所示:

Id                 Description
 1                  one,two,three,four,five
 2                  four,three,two
 3                  five,one

而且我有來自用戶的動態數組,如下所示:

1) $arr = array("five","one");

所以我必須選擇id = 1和id = 3的描述,因為它們的描述包含這些詞。

另一個例子

2) $arr = array("two","three");

所以我必須選擇id = 1和id = 2的描述,因為它們的描述包含這些詞。

那么如何執行該查詢? 有人可以幫忙嗎?

您可以嘗試全文搜索:

喜歡

string str = string.Join(" +", $arr);
str = str.Replace("'","''");

string strSQL = @"SELECT * FROM 
your_table WHERE 
MATCH ( Description) 
AGAINST ('" + str + "' IN BOOLEAN MODE);"

結果是:

 $sql = mysql_query("SELECT * FROM 
                     your_table WHERE 
                     MATCH ( Description) 
                     AGAINST ('+one +five' IN BOOLEAN MODE);");

確保從mysql配置文件中刪除所有停用詞。

至於加號:

第一個SQL示例

SELECT * FROM your_table 
          WHERE match(Description) against('+one +five' IN BOOLEAN MODE) LIMIT 10";

結果:包含單詞“一”和“五”

第二個SQL示例

SELECT * FROM your_table 
           WHERE match(Description) against('+one five' IN BOOLEAN MODE) LIMIT 10";

結果:包含單詞“ one”,但如果行中也包含“ 5”,則將行排得更高

第三個SQL示例

SELECT * FROM your_table 
           WHERE match(Description) against('one five' IN BOOLEAN MODE) LIMIT 10";

結果:包含單詞“一個”或“五個”

禁止全文搜索或適當規范化您的數據(例如, 如果必須通過逗號分隔的數據,請不要使用逗號分隔的數據 ),然后可以使用FIND_IN_SET()搜索以逗號分隔的字符串。

但是,由於FIND_IN_SET()的第一個參數不接受逗號分隔的列表,因此必須首先分隔搜索詞(請參閱PHP的explode )。

通過一些迭代,您可以創建如下查詢:

SELECT * FROM your_table
WHERE FIND_IN_SET('five', description)
  AND FIND_IN_SET('one', description)

有時,當您動態創建此類查詢時,創建這樣的查詢會更容易:

SELECT * FROM your_table
WHERE 1 = 1
/* Start dynamic portion */
  AND FIND_IN_SET('five', description)
  AND FIND_IN_SET('one', description)

或者,實際上,如果您正確使用了PDO綁定參數:

SELECT * FROM your_table
WHERE 1 = 1
/* Start dynamic portion */
  AND FIND_IN_SET(?, description)
  AND FIND_IN_SET(?, description)

使用PHP的bindParam()綁定每個參數。

我已經使用“喜歡”參數做到了。 見下面的代碼

$count = 1;


 foreach($arr as $a){
            if($count == 1){
               $str ="`Description` LIKE '%$a%'";
            }
             else{
               $str.= "AND `Description` LIKE '%$a%'"; 
            }
            $count++;
        }
$query = Select `id` From `my_table` Where $str;

這不是最好的方法,但這給了我想要的結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM