Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Сортировка объедененных таблиц
и вот тут обращаем внимание на последний в списке 'id' => '38529'
в первой выборке отчетливо видно что для данного товара есть позиция поставщика 0
хотя так же есть и позиция 40
но почему выборка такая странная, и как мне получить корректную?
DeepVarvar
Отправлено: 21 Августа, 2015 - 14:48:46
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Да, понял в чем трабла. Тебе надо сделать с подзапросом -- сначала отсортировать, а уже потом группировать, тогда в группировку попадут те, которые более подходят, ибо они будут выше из-за сортировки. (Добавление)
Типа:
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Потому что distinct (как и group by, собственно) работают до сортировки.
Раз до сортировки - значит обрабатывают неупорядоченное множество, следовательно хватают любую первую подходящую строку.
Без подзапроса используйте группировку и функции аггрегации min или max по значению pos (путал, путаю и буду путать asc/desc )
----- PostgreSQL DBA
DlTA
Отправлено: 21 Августа, 2015 - 16:19:27
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
DeepVarvar пишет:
Потому что сортировку он делает уже после группировки, а группировка уже оставила только ПЕРВЫЕ попавшиеся.
любопытная фича/баг, надо помануалить
DeepVarvar
Отправлено: 21 Августа, 2015 - 16:21:18
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Мелкий пишет:
Без подзапроса используйте группировку и функции аггрегации min или max по значению pos
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Помог: 53 раз(а)
Мелкий пишет:
Без подзапроса используйте группировку и функции аггрегации min или max по значению pos
а как такое чудо будет в итоге выглядеть?
Мелкий
Отправлено: 21 Августа, 2015 - 16:37:09
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
DeepVarvar пишет:
Оно оптимальнее будет чем подзапрос?
Не знаю, это просто правильнее с точки зрения SQL.
По идее, для группировки хватит одной временной таблицы, а для подзапроса - самому подзапросу временная таблица, затем distinct наверняка себе ещё одну временную таблицу сделает.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.