![]() |
![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Есть запрос, типа:
select *, CONCAT_WS(" ", client.surname, client.name, client.middlename) as FULL_NAME, CONCAT_WS(", ", client.country, client.region, client.town, client.street, client.home, client.korpus, client.flat) as FULL_ADDRESS from client where :client_id = ID_CLIENT order by FULL_NAME;
После его выполнения FULL_ADDRESS получается подобен следующему:
", , Город, улица, дом, , ,"
Возможно ли как-то избавиться от мешающих разделителей, изменив запрос?
Неактивен
CONCAT_WS(", ", if(client.country='',null,client.country), ...) as FULL_ADDRESS
Неактивен
И так для каждого поля?
У меня не один такой запрос, я потом запутаюсь...
А есть способы, без явного использования таких проверок?
Неактивен
To paulus: Не получиться, ведь тогда между городом и улицей и домом не будет запятой тоже, что не есть правильно.
To Артём Н.: А в чем именно запутаетесь? Просто для всех полей, входящих в concat_ws() вместо имени поля вы пишите if(`имя поля`='',null,`имя поля`)
Неактивен
paulus написал:
Можете в получившейся строке заменить все вхождения «, » на пустую строку
с помощью REPLACE, например.
Тогда разделителей вообще не будет, как vasya заметил...
vasya написал:
To Артём Н.: А в чем именно запутаетесь?
Много запросов и не так мало полей объединяются. Будет нагромождение if().
В принципе, это лучше, чем убирать повторные разделители с помощью "внешней" функции.
Спасибо.
Но, если есть способ без if, интересно его узнать.
Неактивен
Хранить в базе не пустые строки, а null значения
Неактивен
Поздно уже. База есть. Не моя.
Мне, наверное, придётся её структуру немного поменять, но пустые строки на NULL заменять, наверное, не буду.
Функцию бы какую-то, чтобы в неё упрятать "сборку адреса".
Запросы, чтобы выглядели попроще.
Неактивен
Честно говоря, не понял, что Вам не нравится в REPLACE. Если не нравится, что
пропадут все запятые — меняйте ДВЕ запятые подряд на одну. И все запятые в
начале и конце строки.
Неактивен
Я уж переделал с if().
меняйте ДВЕ запятые подряд на одну.
Ради интереса. Как поведёт себя REPLACE, в случае трёх запятых подряд? В этом случае, останется две запятых?
Неактивен
Да, действительно
Неактивен