[英]php, sql multiple keyword match using LIKE
我正在嘗試使用 LIKE 從 sql 中獲取行,其中鍵與列中的鍵數組匹配。
$key = '%PDF%';
$q = mysql_query("SELECT * FROM `ads` WHERE key LIKE '$key' ORDER BY RAND() LIMIT 2");
這可以正常工作並顯示結果,但是當我將密鑰更改為 PDF 文件時。 IE:
$key = '%PDF 文件%';
它沒有顯示結果,因為在 db 中有一個鍵數組,請查看我的 db 列:
這是我的 sql 鍵列:
PDF, pdf, PDF SEARCH, pdf search, PDF ENGINE, pdf
那么解決方案是什么? 如果密鑰是 pdf 文件,如何獲得結果?
我認為可以通過拆分鍵然后匹配關鍵字。 正確的?
這可以通過explode();
但如何? 以及如何搭配sql?
當鍵是'%PDF FILES%'
時,您實際上是在搜索字符串“PDF FILES”,而不是 PDF 和 FILES 單詞的某種組合。
要實現您想要的,請嘗試構建如下查詢:
$key = '%PDF%';
$key2 = '%FILES%';
$q = mysql_query("SELECT * FROM `ads` WHERE (key LIKE '$key' OR key LIKE '$key2') ORDER BY RAND() LIMIT 2");
您可以使用各種技術與 arrays 並展開以構造具有可變數量關鍵字的動態查詢。
嘗試這個,
$keyvalues=split(" ",$search_text);//Breaking the string to array of words
// Append the query by the keywords
while(list($key,$val)=each($keyvalues)){
if($val<>" " and strlen($val) > 0)
{$sql .= " name like '%$val%' or ";}
}// end of while
尾隨 OR 可以通過
$sql=substr($sql,0,(strlen($sql)-3));
這是因為 LIKE 僅適用於一個字符串。 如果您想使用通配符,您必須使用更多帶有 OR 的 LIKE 語句。
另一方面,您可以使用 IN 接受逗號分隔的引號字符串,但它不接受通配符。
您不能在一個語句中為 Like 輸入多個關鍵字。
你可以試試這個它會幫助你。
WHERE key LIKE '%PDF%' OR '%pdf%' OR '%PDF SEARCH%'
等等.....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.