2014-11-05 34 views
1

我試圖在PHP中使用包含**來分隔不同值的數據庫進行搜索。一個例子我的數據庫是:在PHP中使用多個名稱與mysql連接在一起搜索一個項目使用PHP

GS 300 ** GS3000

我想搜索值在我的分貝要麼GS 300或GS3000。

我的腳本是:對非雙asterick值

$query = "SELECT DISTINCT(parts_cats.Part_Type) FROM parts_cats WHERE stock.Item_Specifics_Type IN ('$ids') AND stock.stock_item!='' and Make='$Make' AND Model LIKE '%" . mysql_real_escape_string($Model) . "%'" 

目前搜索工作正常(例如,如果搜索G3 500),但它的GS 300 ** GS3000返回任何結果。

+0

嘗試一個爆炸查詢 – 2014-11-05 14:21:21

+0

檢查數據庫,看看它是如何存儲的..當你把它放入數據庫時​​,你是否也逃脫了它? – 2014-11-05 14:21:26

+0

@MichailMichailidis作爲GS 300存儲在數據庫中** GS3000(VARCHAR 50) – tomantford 2014-11-05 14:24:44

回答

1

如果你想找到一個或其他模型你應該做(雖然非常昂貴)。我不知道是什麼**的,你是如何存儲在數據庫中的東西...

"SELECT DISTINCT(parts_cats.Part_Type) 
    FROM parts_cats 
    WHERE stock.Item_Specifics_Type IN ('$ids') 
     AND stock.stock_item!='' AND Make='$Make' 
     AND (Model LIKE '%" . mysql_real_escape_string($ModelOne) . "%' 
      OR Model LIKE '%" . mysql_real_escape_string($ModelTwo) . "%')" 

或生成的查詢

SELECT DISTINCT(parts_cats.Part_Type) 
    FROM parts_cats 
    WHERE stock.Item_Specifics_Type IN ('$ids') 
     AND stock.stock_item!='' and AND='$Make' 
     AND (Model LIKE '%GS 300%' 
      OR Model LIKE '%GS3000%') 

編輯:

好吧我會做是有一個表,如 id concatNames,並有5, GS 300**GS3000在其中的條目.. 然後,你得到任何用戶輸入,你使用我寫上面的查詢..你有沒有嘗試過呢?

您可以讓用戶輸入類似這樣的字符串:使用

$array = explode("**",$str) 

$str = "something**something2**something3"; 

然後,您可以在一個陣列或者你可以有多個<input> s表示,用戶可以把東西分開。

在任何一種情況下,你都有一個$數組的所有不同的值..

那麼你動態地構造查詢的WHERE一部分

"AND (Model Like '%".$array[0]."%' OR Model Like '%".$array[1]."%' OR Model Like '%".$array[2]."%')" 

這會工作,即使用戶輸入GS300GS3000單獨或GS 300**GS3000GS3000**GS 300

+0

我認爲這是正確的方向,但用**作爲分隔符來爆炸字符串的最佳方式是什麼? - @ $ values = explode(「'**'」,$ Model); – tomantford 2014-11-05 15:06:14

+1

'$ array = explode(「**」,$ string);' 然後,您可以通過$ array上的循環逐步構建查詢,請參閱上面的查詢;) – 2014-11-05 15:07:44

+0

@tomantford - 此查詢相當昂貴。您可能希望爲該字段使用連接名稱的全文索引,或者更好地將信息移動到Lucene/ElasticSearch之類的東西中,以便您可以使用現在使用的正則表達式查詢獲得更好的性能 – 2014-11-05 16:47:43

0

您可以嘗試

... 
AND (Model LIKE 'SEARCHTERM%' OR Model LIKE '%**SEARCHTERM%') 

例如,SEARCHTERM可以是GS3000。