|
|
|
Сортировка по полю в Left Join
|
|||
|---|---|---|---|
|
#18+
Имеется таблица 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 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 16:40:09 |
|
||
|
Сортировка по полю в Left Join
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2014, 17:07:44 |
|
||
|
Сортировка по полю в Left Join
|
|||
|---|---|---|---|
|
#18+
retvizan, Там сплошные костыли кроме способо номер 4. Автору. Используйте group_concat(), но все равно потребуется в приложени дописать функцию разбора чего конкат наконкатенировал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2014, 14:13:18 |
|
||
|
Сортировка по полю в Left Join
|
|||
|---|---|---|---|
|
#18+
Например: ... 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 такого не подразумевает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2014, 14:18:45 |
|
||
|
Сортировка по полю в Left Join
|
|||
|---|---|---|---|
|
#18+
debloggerretvizan, Там сплошные костыли кроме способо номер 4.Чем 4-ый способ лучше? debloggerАвтору. Используйте group_concat(), но все равно потребуется в приложени дописать функцию разбора чего конкат наконкатенировал.Зачем group_concat(), если нужно только последнее значение комментария? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 04:38:41 |
|
||
|
Сортировка по полю в Left Join
|
|||
|---|---|---|---|
|
#18+
retvizan, Вы не можете выбирать запись из группы к которой не применялись агрегатные функции. Но вы можете выбрать все записи как текст с сепаратором и позже разобрать его. Или вы можете добавить условие в отношение такое, которое по замыслу ограничит выборку лишних записей - это способ номер 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 06:03:10 |
|
||
|
Сортировка по полю в Left Join
|
|||
|---|---|---|---|
|
#18+
Например вместо 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 Разумеется должен быть явный признак по которому можно ограничить выборку в отношении ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 06:06:45 |
|
||
|
Сортировка по полю в Left Join
|
|||
|---|---|---|---|
|
#18+
debloggerretvizan, Вы не можете выбирать запись из группы к которой не применялись агрегатные функции. Об этом и статья. debloggerНо вы можете выбрать все записи как текст с сепаратором и позже разобрать его.Можно, но это из серии ректального удаления гланд (тоже ведь можно, наверное). Зачем передавать клиенту большую строку лишних данных, а потом её парсить, если задача решается средствами бд? debloggerИли вы можете добавить условие в отношение такое, которое по замыслу ограничит выборку лишних записей - это способ номер 4.4-ый способ реализует группировку через left join, за счет чего обходится ограничение "нельзя выбирать запись из группы к которой не применялись агрегатные функции". Мой вопрос - почему остальные способы вы назвали костылями, выделив именно 4-ый? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2014, 08:04:34 |
|
||
|
Сортировка по полю в Left Join
|
|||
|---|---|---|---|
|
#18+
Потому что вложенные select, процедуры и варианты типа давайте считать что строка даты имеет 19 символов - костыли для калек. Уровень абстракции запроса падает соответственно перечислению. group_concat() разумеется годится для коротких данных, например собрать id, или наименования. Если там статьи по 10К, то ограничиваем непосредственно join. Но вот что интересно. Сама логика группировки кагбе намекает что данные по группам нам нужны, иначе за каким они вообще там находятся. Например те же самые фотки. Допустим получили 5 фоток из них одна главная. Ну так пользуйтесь - засуньте 4 в спойлер и показывайте по щелчку или ховеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 07:25:27 |
|
||
|
Сортировка по полю в Left Join
|
|||
|---|---|---|---|
|
#18+
debloggerПотому что вложенные select, процедуры и варианты типа давайте считать что строка даты имеет 19 символов - костыли для калек. Уровень абстракции запроса падает соответственно перечислению. Что такое "уровень абстракции запроса"? И почему подзапрос его портит, а left join таблицы на себя нет? debloggerНо вот что интересно. Сама логика группировки кагбе намекает что данные по группам нам нужны, иначе за каким они вообще там находятся.Задачи бывают разные. Если требуется только запись с максимальным значением поля, то зачем передавать клиенту всю группу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2014, 11:10:56 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38554386&tid=1835247]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 350ms |

| 0 / 0 |
