[英]How to concatenate multiple columns in where clause in sql?
If I'm going to search a city address for example, "Quezon City", there's a result. 如果我要搜索一个城市地址,例如“奎松市”,就会有结果。 But if I'll search city address and province like "Quezon City, Metro Manila", no result which supposedly there is. 但是,如果我要搜索“马尼拉大都会奎松市”这样的城市地址和省份,那么应该没有结果。
Here's my sql query as of the moment. 到目前为止,这是我的SQL查询。
//TABLES
t1 = street
t3 = province
t4 = city
t5 = village
SELECT t1.*
, t1.name AS propertyname
, t2.name AS typeName
, t3.name AS provName
, t4.name AS cityName
, t5.name AS brgyName
, t6.imgpath_tn AS imgName
FROM proplistings AS t1
LEFT JOIN proptypes AS t2 ON t2.id = t1.property_type_id
LEFT JOIN tbl_province AS t3 ON t3.id = t1.prov_id
LEFT JOIN tbl_city AS t4 ON t4.id = t1.city_id
LEFT JOIN tbl_barangay AS t5 ON t5.id = t1.brgy_id
LEFT JOIN proplistings_images AS t6 ON t6.propid = t1.id
WHERE t1.deleted = 0
AND t1.announceas = '1'
AND t6.defaultimg = 1
AND t6.imgpath != ''
AND t1.status=1
AND CONCAT(t1.street,', t5.name,', ', t4.name,', ', t3.name, ',t1.propcode,', ')
LIKE '%Quezon City, Metro Manila%'
ORDER BY t1.date_added DESC
If you concat and any of the columns contain null then the result is null. 如果concat并且任何列包含null,则结果为null。 Try coding for null. 尝试编码为空。
For example 例如
set @a = 'abc';
set @b = null;
select @a,@b,concat(@a,@b),
concat(ifnull(@a,''),ifnull(@b,''));
+------+------+---------------+-------------------------------------+
| @a | @b | concat(@a,@b) | concat(ifnull(@a,''),ifnull(@b,'')) |
+------+------+---------------+-------------------------------------+
| abc | NULL | NULL | abc |
+------+------+---------------+-------------------------------------+
1 row in set (0.00 sec)
I found 2 issues. 我发现了2个问题。
I see that you concatenate in following order: ... + province + city + ...
So if there Quezon City
is city and Metro Manila
is province - results of concatenation looks like: Metro Manila, Quezon City
so you have to use LIKE '%Metro Manila, Quezon City%'
instead of LIKE '%Quezon City, Metro Manila%'
. 我看到您按以下顺序连接: ... + province + city + ...
因此,如果Quezon City
是城市, Metro Manila
是省-级联的结果看起来像: Metro Manila, Quezon City
所以您必须使用LIKE '%Metro Manila, Quezon City%'
而不是LIKE '%Quezon City, Metro Manila%'
。
Also you have to use IFNULL
to avoid concatenation of nulls, that because if any of value in CONCAT
will be NULL
entire result will be NULL
. 另外,您还必须使用IFNULL
以避免空值的串联,因为如果CONCAT
任何值将为NULL
整个结果将为NULL
。
So your WHERE
clause should be like this: 因此,您的WHERE
子句应如下所示:
WHERE t1.deleted = 0
AND t1.announceas = '1'
AND t6.defaultimg = 1
AND t6.imgpath != ''
AND t1.status=1
AND CONCAT(IFNULL(CONCAT(t1.street,', '), ''),
IFNULL(CONCAT(t1.propcode,', '), ''),
IFNULL(CONCAT(t3.name,', '), ''),
IFNULL(CONCAT(t4.name,', '), ''),
IFNULL(CONCAT(t5.name,', '), '')
)
LIKE REPLACE(REPLACE('%Metro Manila, Quezon City%',' ','%'),',','%')
Or you could use Dynamic SQL, something like: 或者您可以使用动态SQL,例如:
DECLARE @SearchStr VARCHAR(1000)
DECLARE @Query VARCHAR(1000)
SET @SearchStr = 'Metro Mangila, Quezon City'
SET @Query = 'SELECT t1.*
, t1.name AS propertyname
, t2.name AS typeName
, t3.name AS provName
, t4.name AS cityName
, t5.name AS brgyName
, t6.imgpath_tn AS imgName
FROM proplistings AS t1
LEFT JOIN proptypes AS t2 ON t2.id = t1.property_type_id
LEFT JOIN tbl_province AS t3 ON t3.id = t1.prov_id
LEFT JOIN tbl_city AS t4 ON t4.id = t1.city_id
LEFT JOIN tbl_barangay AS t5 ON t5.id = t1.brgy_id
LEFT JOIN proplistings_images AS t6 ON t6.propid = t1.id
WHERE t1.deleted = 0
AND t1.announceas = ''1''
AND t6.defaultimg = 1
AND t6.imgpath != ''''
AND t1.status=1
AND (
CONCAT(IFNULL(CONCAT(t1.street,'', ''), ''''),
IFNULL(CONCAT(t1.propcode,'', ''), ''''),
IFNULL(CONCAT(t3.name,'', ''), ''''),
IFNULL(CONCAT(t4.name,'', ''), ''''),
IFNULL(CONCAT(t5.name,'', ''), '''')
) LIKE ''%' + REPLACE(@SearchStr, ' ', '%''
OR
CONCAT(IFNULL(CONCAT(t1.street,'', ''), ''''),
IFNULL(CONCAT(t1.propcode,'', ''), ''''),
IFNULL(CONCAT(t3.name,'', ''), ''''),
IFNULL(CONCAT(t4.name,'', ''), ''''),
IFNULL(CONCAT(t5.name,'', ''), '''')
) LIKE ''%' + '%'')'
EXEC(@Query)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.