[英]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.