2014-07-16 25 views
0

我正在用implode函數對搜索框中的任何用戶類型執行PHP mysql搜索查詢。查詢工作正常,但我想稍微改變它,因爲它沒有給我正確results.Please看看查詢用implode函數調整php mysql搜索查詢

$lcSearchVal=$_GET['name']; 
$lcSearcharr=explode("-",$lcSearchVal); 
foreach($lcSearcharr as $lcSearchWord){ 
$lcSearchWord = mysqli_real_escape_string($mysqli, $lcSearchWord); 
$lcSearchWord = preg_replace('/%/', '\%', $lcSearchWord); 
    $parts[] = '`Description` LIKE "% '.$lcSearchWord.'%"'; 
    $parts1[] = '`Description` LIKE "% '.$lcSearchWord.' %"'; 
} 

$qry='SELECT * FROM table_name WHERE ('.implode ('AND',$parts).')'; 

首先IM的獲取任何用戶在搜索框代碼above.Then IM分裂鍵入第二頁的第一行搜索該變量爲通過分裂陣列他們與連字符search.Then即時執行foreach循環該數組,這是用於sql查詢

例如: - 用戶在首頁搜索as-men休閒鞋。 我會在第二頁如男士休閒鞋。 然後,我會把它們放在一個像男人,休閒,鞋子這樣的三個元素。 那麼我會執行我上面寫的搜索查詢,這將形成類似如下

select * from table_name where (Description like '%men %' and Description like '%casual %' and Description like '%shoes %') 

但我想查詢應該像下面

select * from table_name where (Description like '%men %' and Description like '%casual %') or (Description like '%casual %' and Description like '%shoes %') or (Description like '%men %' and Description like '%shoes %') 

請調整查詢

幫助
+0

說明就是IM執行類似查詢 – user3843585

回答

0

使用2 for循環枚舉所有組合:

<?php 
$s = "men-casual-shoes"; 
$ss = explode('-', $s); 
$parts = array(); 
for ($i = 0; $i < count($ss)-1; $i++) { 
    for ($j = $i+1; $j < count($ss); $j++) { 
     # You may want to do mysqli_real_escape_string here 
     $w1 = str_replace('%', '\%', $ss[$i]); 
     $w2 = str_replace('%', '\%', $ss[$j]); 
     $parts[] = "(`description` like '% $w1 %' and `description` like '% $w2 %')"; 
    } 
} 

$qry = 'SELECT * FROM table_name WHERE ('.implode (' or ',$parts).')'; 
echo $qry; 

打印

SELECT * FROM table_name WHERE ((`description` like '% men %' and `description` like '% casual %') or (`description` like '% men %' and `description` like '% shoes %') or (`description` like '% casual %' and `description` like '% shoes %')) 
+0

感謝的人,以便及時幫助表中的列名的一個,但是當我輸入變量s一字一句,就像變量s = men.then解決方案失敗請檢查一次 – user3843585

+0

您可以添加一個if語句來檢查是否只有一個單詞,然後相應地構建查詢 – Fabricator

+0

k.認爲相同,謝謝 – user3843585