2015-08-05 4 views
0

Я использую этот запрос на выборку:SQL CONCAT если столбец не нулевой

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 

, но иногда, некоторые из адресов столбцов может быть нулевым/пустой, поэтому я не хочу, чтобы включить их

I Я использую этот запрос в PHP, так что я пробовал:

str_replace(array("\r","\n"), '', $result["address"]) 

но только удалив все строки между адресами, как я могу удалить только пустые строки?

ответ

3

Просто добавьте условие -

CONCAT(IF(address1 IS NOT NULL, CONCAT(address1, '\r'), ''), IF(address2 IS NOT NULL, CONCAT(address2, '\r'), ''), .... 
+0

работает безупречно. будет принимать через 5 минут, когда смогу :) – charlie

+0

Рад, что это помогло. :) –

+0

Почему бы не использовать функцию потока управления 'IFNULL', если вы собираетесь использовать' IF (.... IS NOT NULL' – Ohgodwhy

0

Что-то вроде этого?

$addressArr = array(); 
if (isset($result["address"])){ 
foreach ($result["address"] as $address) { 
    if ($address) { 
    $addressArr = $address; 
    } 
} 
} 
var_dump($addressArr); 
0

При изменении выбора состояния и использовать функцию IFNULL потока управления, вы можете проверить, если столбец имеет нулевое значение, и если да, то используйте «» в качестве возвращаемого значения для этого. Кроме того, вам нужно снова конкатрировать в первом аргументе оператор IFNULL, чтобы \r отображался только тогда, когда address1 не имеет значения NULL.

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.

Смежные вопросы