PHP внедряет альтернативу внутри запросов MySQL - PullRequest
0 голосов
/ 14 февраля 2012

Мне нужна альтернатива implode для запросов mysql. После исследования были найдены конкататные функции.

Вопрос в том, могу ли я конкатировать по пробелу, как это CONCAT_WS ('', sender.fname, sender.mname, sender.lname) AS sender_name?есть ли вероятность, что он выдаст ошибку, если одно из значений будет нулевым?

Вот мой запрос.

SELECT message.id, message.from_id, message.to_id, message.subject, 
                    message.date, message.deleted, message.read, 
                    CONCAT_WS(' ',sender.fname, sender.mname, sender.lname) AS sender_name, 
                    CONCAT_WS(' ',recipient.fname, recipient.mname, recipient.lname) AS recipient_name,  
                    FROM msghistory AS message 
                    LEFT JOIN users AS sender ON sender.id=message.from_id, 
                    LEFT JOIN users AS recipient ON recipient.id=message.to_id 
                    GROUP BY message.id DESC

Еще один вопрос в этом запросе CONCAT_WS ('', имя-получателя, имя-получателя, имя-получателя). AS имя-получателя может быть не найдено (если в таблице пользователей нет подходящей строки),Это даст какую-нибудь ошибку?

Ответы [ 4 ]

1 голос
/ 14 февраля 2012

CONCAT_WS () не пропускает пустые строки.Однако он пропускает любые значения NULL после аргумента разделителя.

Это должно ответить на ваш вопрос.

1 голос
/ 14 февраля 2012

Да, вы можете использовать CONCAT_WS вот так. Если один из аргументов равен NULL, ошибки не будет. Аргумент NULL просто не используется.

Об этом говорится в руководстве :

CONCAT_WS () не пропускает пустые строки. Однако он пропускает все значения NULL после аргумента разделителя.

Также очень легко убедиться в этом:

SELECT CONCAT_WS(' ', 'abc', NULL, 'def')
'abc def'
1 голос
/ 14 февраля 2012

Да, вы можете.Если будет null, ошибок не будет

0 голосов
/ 14 февраля 2012

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

CONCAT_WS(' ', COALESCE(val1, ''), COALESCE(val2, ''), ...)

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...