Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL将地址转换为逗号分隔的字符串_Mysql - Fatal编程技术网

MySQL将地址转换为逗号分隔的字符串

MySQL将地址转换为逗号分隔的字符串,mysql,Mysql,是否有任何方法可以缩短/更容易地读取以下SQL以连接字符串 SELECT CONCAT( IF(location_address1 != '', CONCAT(location_address1, ", "), "" ), IF(location_address2 != '', CONCAT(location_address2, ", "), "" ), IF(location_t

是否有任何方法可以缩短/更容易地读取以下SQL以连接字符串

SELECT
   CONCAT(       
    IF(location_address1 != '',
       CONCAT(location_address1, ", "),
       ""
    ),
    IF(location_address2 != '',
       CONCAT(location_address2, ", "),
       ""
    ),
    IF(location_town != '',
       CONCAT(location_town, ", "),
       ""
    ),
    IF(location_region != '',
       CONCAT(location_region, ", "),
       ""
    ),
    IF(location_postcode != '',
       CONCAT(location_postcode, ", "),
       ""
    ),
    c.country_name
   )      
FROM
   countries c      
WHERE
   c.country_id = locations.country_id LIMIT 1
不跳过空字符串。但是,它会跳过分隔符参数之后的任何空值

如果expr1=expr2为真,则返回NULL,否则返回expr1

因此,您的查询可能是:

SELECT 
  CONCAT_WS(', ', 
       NULLIF(location_address1, ''),
       NULLIF(location_address2, ''),
       NULLIF(location_town, ''), 
       NULLIF(location_region, ''), 
       NULLIF(location_postcode, ''), 
       NULLIF(country_name, '')
  ) AS address
FROM
   countries c      
WHERE
   c.country_id = locations.country_id LIMIT 1
不跳过空字符串。但是,它会跳过分隔符参数之后的任何空值

如果expr1=expr2为真,则返回NULL,否则返回expr1

因此,您的查询可能是:

SELECT 
  CONCAT_WS(', ', 
       NULLIF(location_address1, ''),
       NULLIF(location_address2, ''),
       NULLIF(location_town, ''), 
       NULLIF(location_region, ''), 
       NULLIF(location_postcode, ''), 
       NULLIF(country_name, '')
  ) AS address
FROM
   countries c      
WHERE
   c.country_id = locations.country_id LIMIT 1
您可以将MySQL中的函数用作:

SELECT CONCAT_WS(',',IF(location_address1 = '', NULL, location_address1),
                     IF(location_address2 = '', NULL, location_address2),
                     IF(location_town = '', NULL, location_town),
                     IF(location_region = '', NULL, location_region),
                     IF(location_postcode = '', NULL, location_postcode),
                     c.country_name)  AS str
FROM countries c
WHERE c.country_id = locations.country_id
LIMIT 1;
甚至@CyberDem0n建议的简单方法:

SELECT CONCAT_WS(',',NULLIF(location_address1,''),
                     NULLIF(location_address2,''),
                     NULLIF(location_town,''),
                     NULLIF(location_region,''),
                     NULLIF(location_postcode,''),
                     c.country_name)  AS str
FROM countries c
WHERE c.country_id = locations.country_id
LIMIT 1;
但是,如果您可以存储空值而不是空值,这将是更好的方法。

您可以将MySQL中的函数用作:

SELECT CONCAT_WS(',',IF(location_address1 = '', NULL, location_address1),
                     IF(location_address2 = '', NULL, location_address2),
                     IF(location_town = '', NULL, location_town),
                     IF(location_region = '', NULL, location_region),
                     IF(location_postcode = '', NULL, location_postcode),
                     c.country_name)  AS str
FROM countries c
WHERE c.country_id = locations.country_id
LIMIT 1;
甚至@CyberDem0n建议的简单方法:

SELECT CONCAT_WS(',',NULLIF(location_address1,''),
                     NULLIF(location_address2,''),
                     NULLIF(location_town,''),
                     NULLIF(location_region,''),
                     NULLIF(location_postcode,''),
                     c.country_name)  AS str
FROM countries c
WHERE c.country_id = locations.country_id
LIMIT 1;
但是,如果您可以存储空值而不是空值,这将是更好的方法

我没有检查语法,但我的想法是,与其检查每个语法是否为null或空,不如始终使用连接,然后将所有、替换为、

我没有检查语法,但我的想法是,与其检查每个语法是否为null或空,不如按照@Xdazz的要求,始终使用连接,然后将所有、替换为、。

此修剪版本:

SELECT 
  CONCAT_WS(', ', 
       NULLIF(Trim(location_address1), ''),
       NULLIF(Trim(location_address2), ''),
       NULLIF(Trim(location_town), ''), 
       NULLIF(Trim(location_region), ''), 
       NULLIF(Trim(location_postcode), ''), 
       NULLIF(Trim(country_name), '')
  ) AS address
FROM
   countries c      
WHERE
   c.country_id = locations.country_id LIMIT 1
根据@Xdazz

此修剪版本:

SELECT 
  CONCAT_WS(', ', 
       NULLIF(Trim(location_address1), ''),
       NULLIF(Trim(location_address2), ''),
       NULLIF(Trim(location_town), ''), 
       NULLIF(Trim(location_region), ''), 
       NULLIF(Trim(location_postcode), ''), 
       NULLIF(Trim(country_name), '')
  ) AS address
FROM
   countries c      
WHERE
   c.country_id = locations.country_id LIMIT 1

如果位置\地址1=,NULL,位置\地址1可替换为NULL位置\地址1,如果位置\地址1=,NULL,位置\地址1可替换为NULL位置\地址1,