2011-07-04 45 views
0

我試圖從sql中使用LIKE抓取行,其中鍵匹配列中的關鍵數組。php,sql多個關鍵字匹配使用LIKE

$key = '%PDF%'; 
$q = mysql_query("SELECT * FROM `ads` WHERE key LIKE '$key' ORDER BY RAND() LIMIT 2"); 

這工作正常,並顯示結果,但當我將我的密鑰更改爲PDF文件。即:

$ key ='%PDF FILES%';

它不顯示結果作爲DB有鍵的陣列,請看看我的數據庫列:

這裏是我的SQL鍵列:

PDF,PDF格式,PDF搜索,pdf搜索,PDF ENGINE,pdf

那麼最新的解決方案是什麼?如果關鍵是pdf文件如何獲得結果?

我認爲它可以通過拆分鍵然後匹配關鍵字。對?

這可以通過explode();完成,但如何?以及如何與SQL相匹配?

回答

3

當密鑰爲'%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"); 

您可以使用各種技術與陣列和爆炸構建動態查詢的關鍵字數量可變的。

-2

您不能在Like單個語句中輸入多個關鍵字。

你可以嘗試這個,它會幫助你。

WHERE key LIKE '%PDF%' OR '%pdf%' OR '%PDF SEARCH%' 

等等.....

+0

被刪除你的意思是'WHERE關鍵LIKE '%PDF%' OR鍵LIKE '%搜索%' OR鍵等。 ..' – JJJ

+0

是的如果你能給我的單詞列表,我可以爲你建立查詢... – Rush

+0

我想你錯過了我的觀點:我的意思是你不能'在哪裏鍵'val1'或'val2' '就像你在你的答案中一樣,'OR LIKE'給出一個語法錯誤。您必須完整地寫出條件:WHERE鍵LIKE'val1'或者鍵LIKE'val2''。 – JJJ

0

這是因爲像工作只有一個字符串。如果你想使用通配符,你必須使用更多的LIKE語句。

另一方面,您可以使用IN,它接受逗號分隔帶引號的字符串,但它不接受通配符。

2

試試這個,

$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 

後沿或者可以通過

$sql=substr($sql,0,(strlen($sql)-3)); 
+1

」。 – JJJ

+0

@Juhana,更新了答案。 – sudheshna