powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка по полю в Left Join
10 сообщений из 10, страница 1 из 1
Сортировка по полю в Left Join
    #38553782
igramnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется таблица
catalog_buy_system
в ней идут заказы.

Есть таблица
catalog_buy_logs

В ней ведется лог по изменению статуса заказа.

Делаю запрос
"SELECT b.order_id, bl.comments FROM `catalog_buy_system` b LEFT JOIN `catalog_buy_logs` bl ON (bl.order_id = b.order_id) GROUP BY `order_id` ORDER BY `order_id` DESC"

В таблице для order_id? например 3 есть 2 записи в колонке comments
1 - null
2 - "Заказ отменен"

Когда я делаю запрос, то в commnets получаю пусто, а надо получить значнеие второго поля. Как сделать сортировку по полю comments? Т.е. чтобы при присоединении таблицы выбиралось последнее значение comments ?
...
Рейтинг: 0 / 0
Сортировка по полю в Left Join
    #38553844
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igramnet,

Правильно нужно делать не сортировку, а группировку. Посмотрите эту статью
...
Рейтинг: 0 / 0
Сортировка по полю в Left Join
    #38554382
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
retvizan,

Там сплошные костыли кроме способо номер 4.

Автору. Используйте group_concat(), но все равно потребуется в приложени дописать функцию разбора чего конкат наконкатенировал.
...
Рейтинг: 0 / 0
Сортировка по полю в Left Join
    #38554386
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например:
...
group_concat(distinct concat_ws("-",`ph`.`photo_id`, `ph`.`image_file`) order by `ph`.`sort_order` asc separator "\n") as 'image_files'

Макс длина group_concat() обычно 1024 символа.

Затем в апликухе image_files колется на массив по известному сепаратору и можно взять первую фотку как заглавную, а остальные - сколько нашлось - как дополнительные. Или вообще их не показывать когда view такого не подразумевает.
...
Рейтинг: 0 / 0
Сортировка по полю в Left Join
    #38554810
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerretvizan,

Там сплошные костыли кроме способо номер 4.Чем 4-ый способ лучше?


debloggerАвтору. Используйте group_concat(), но все равно потребуется в приложени дописать функцию разбора чего конкат наконкатенировал.Зачем group_concat(), если нужно только последнее значение комментария?
...
Рейтинг: 0 / 0
Сортировка по полю в Left Join
    #38554813
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
retvizan,

Вы не можете выбирать запись из группы к которой не применялись агрегатные функции.

Но вы можете выбрать все записи как текст с сепаратором и позже разобрать его.

Или вы можете добавить условие в отношение такое, которое по замыслу ограничит выборку лишних записей - это способ номер 4.
...
Рейтинг: 0 / 0
Сортировка по полю в Left Join
    #38554814
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например вместо

group_concat(distinct concat_ws("-",`ph`.`photo_id`, `ph`.`image_file`) order by `ph`.`sort_order` asc separator "\n") as 'image_files'

from...

left join Photo as ph using(article_id)

использовать

concat_ws("-",`ph`.`photo_id`, `ph`.`image_file`) as 'image_files'

from...

left join Photo as ph on ph.article_id = art.article_id and ph.sort_order = 1

Разумеется должен быть явный признак по которому можно ограничить выборку в отношении
...
Рейтинг: 0 / 0
Сортировка по полю в Left Join
    #38554826
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerretvizan,

Вы не можете выбирать запись из группы к которой не применялись агрегатные функции. Об этом и статья.


debloggerНо вы можете выбрать все записи как текст с сепаратором и позже разобрать его.Можно, но это из серии ректального удаления гланд (тоже ведь можно, наверное). Зачем передавать клиенту большую строку лишних данных, а потом её парсить, если задача решается средствами бд?

debloggerИли вы можете добавить условие в отношение такое, которое по замыслу ограничит выборку лишних записей - это способ номер 4.4-ый способ реализует группировку через left join, за счет чего обходится ограничение "нельзя выбирать запись из группы к которой не применялись агрегатные функции".
Мой вопрос - почему остальные способы вы назвали костылями, выделив именно 4-ый?
...
Рейтинг: 0 / 0
Сортировка по полю в Left Join
    #38555220
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что вложенные select, процедуры и варианты типа давайте считать что строка даты имеет 19 символов - костыли для калек. Уровень абстракции запроса падает соответственно перечислению.

group_concat() разумеется годится для коротких данных, например собрать id, или наименования. Если там статьи по 10К, то ограничиваем непосредственно join.

Но вот что интересно. Сама логика группировки кагбе намекает что данные по группам нам нужны, иначе за каким они вообще там находятся.

Например те же самые фотки. Допустим получили 5 фоток из них одна главная. Ну так пользуйтесь - засуньте 4 в спойлер и показывайте по щелчку или ховеру.
...
Рейтинг: 0 / 0
Сортировка по полю в Left Join
    #38555385
retvizan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerПотому что вложенные select, процедуры и варианты типа давайте считать что строка даты имеет 19 символов - костыли для калек. Уровень абстракции запроса падает соответственно перечислению. Что такое "уровень абстракции запроса"? И почему подзапрос его портит, а left join таблицы на себя нет?


debloggerНо вот что интересно. Сама логика группировки кагбе намекает что данные по группам нам нужны, иначе за каким они вообще там находятся.Задачи бывают разные. Если требуется только запись с максимальным значением поля, то зачем передавать клиенту всю группу?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сортировка по полю в Left Join
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]