2012-06-15 49 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%"