2012-06-15 48 views
0

我有一個自動完成的搜索字段,用戶可以使用它來查找不同的價格表。如何在MySQL中執行CONCAT比較?

我想在數據庫中進行比較的字段有: *品牌名稱(字符串) * Modelyear(串) *車輛的車輛類型(INT)

類型爲0,1或2 。這是(大篷車,mobilehome,拖車)

因此,用戶可以搜索: 「阿德里亞560 2005大篷車」

我的第一個想法是做一個CONCAT LIKE比較。 哪裏CONCAT(品牌,modelyear,類型)LIKE'%Adria 560 2005 Caravan%'

但問題是,類型的車輛是一個整數,所以它會比較「大篷車」與0,1,2。

我可以以某種方式將int轉換爲我比較的字符串嗎?

+0

搜索如何「連接」表 – Rufinus

+0

如果您的用戶搜索eg 「2005大篷車」。它是否由設計? – RandomSeed

+0

對於這個可怕的建議黑客,我打算這樣做'%Adria%%560%%2005%%Caravan%' –

回答

0

在搜索前用PHP str_replace()或preg_replace()函數預處理搜索字符串。如果您決定這麼做,這將使您能夠在未來以簡單的方式支持多種語言。 理想情況下,你應該分離WHERE條件,使數據庫系統能夠優化查詢但是它想:

WHERE type=0 AND CONCAT(brand,modelyear) LIKE '%Adria 560 200[4-6]%' 

+0

-1。如果您發佈有關此問題的問題,我很樂意進一步解釋。 +1建議單獨的WHERE條件。 – RandomSeed

+0

可怕的黑客在哪裏?我試着做這樣的事情,它的效果很好。 –

0

如果車輛類型的表名是vehicleType查詢將類似於如下:

SELECT * 
FROM vehicle v 
INNER JOIN vehicleType vt on vt.vehicle_type_id = v.vehicle_type 
WHERE concat_ws(v.brandName,v.modelYear,vt.vehicle_type) LIKE "%whatever%"