我正在使用此SELECT查询:
SELECT sequence, company,
CONCAT(address1, '\r', address2, '\r', address3, '\r', town, '\r', county, '\r', postcode) AS address
FROM customer
WHERE company_status = 'Customer'
ORDER BY company ASC
但有时,某些地址列可能为空/空,因此我不想包含它们
我在PHP中使用此查询,所以我尝试过:
str_replace(array("\r","\n"), '', $result["address"])
但这只是删除地址之间的所有换行符,如何只删除空行?
答案 0 :(得分:3)
只需添加条件 -
CONCAT(IF(address1 IS NOT NULL, CONCAT(address1, '\r'), ''), IF(address2 IS NOT NULL, CONCAT(address2, '\r'), ''), ....
答案 1 :(得分:0)
这样的东西?
$addressArr = array();
if (isset($result["address"])){
foreach ($result["address"] as $address) {
if ($address) {
$addressArr = $address;
}
}
}
var_dump($addressArr);
答案 2 :(得分:0)
如果修改选择状态并使用控制流函数IFNULL
,则可以测试列是否为空,如果是,则使用''作为此的返回值。此外,您需要在IFNULL语句的第一个参数内再次连接,以便仅在\r
不为空时才显示address1
。
SELECT sequence,
company,
CONCAT(IFNULL(CONCAT(address1, '\r'),''), IFNULL(CONCAT(address2, '\r'),''), IFNULL(CONCAT(address3, '\r'),''), town, '\r', county, '\r', postcode) as address
FROM customer
WHERE company_status = 'Customer'
ORDER BY company A
最后,您会注意到数据库中不支持empty
文本。这是因为它被认为是一个糟糕的设计,同时拥有空字段和空字段。让我们解决这个问题吧。
UPDATE customer SET address1=NULL WHERE MyColumn='';
只需为地址列运行此命令即可。然后将列的默认值设置为null。