Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Группировка по меньшему значению 
V
    Опции темы
maxipub
Дата 12.1.2010, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



В общем ситуация там такая, что эта часть используется в большом запросе. Вот упростил его до того момента, когда начинаются проблемы:

Код

SELECT MIN(t.id), t.sub_id, s.dat FROM `table` AS t INNER JOIN `stats` AS s ON s.id=t.id GROUP BY t.sub_id


В таблице stats соответственно есть поле уникальное id, по которому и ведется джоин. Проблема в том, что выбираемые данные s.dat не соответствуют MIN(t.id), а соответствуют тому самому t.id, который возвращается в результате простого GROUP BY (т.е. без MIN(t.id)). Подозреваю, что тут у меня какие-то косяки с логикой запроса.
PM MAIL   Вверх
Akina
Дата 12.1.2010, 16:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Вот-вот... выбираемое поле, не использованное в агрегатной функции, обязано включаться в Group By.
У тебя нет ни того, ни другого - строгие СУБД на это откликнутся ошибкой, а мускул в силу гипертрофированной user-friendly просто берёт отфонарное значение.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 12.1.2010, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Код

select 
  id
  ,sub_id
 ,s.dat
from (
  SELECT MIN(t.id) id
              , sub_id
  FROM `table` AS t 
  GROUP BY t.sub_id) t
INNER JOIN `stats` AS s ON s.id=t.id 




--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(Akina @  12.1.2010,  16:22 Найти цитируемый пост)
выбираемое поле, не использованное в агрегатной функции, обязано включаться в Group By

Хм... smile а можно подробней, что сие означает, как следует поступить?
PM MAIL   Вверх
Zloxa
Дата 12.1.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(Akina @  12.1.2010,  16:22 Найти цитируемый пост)
гипертрофированной user-friendly 

думаю не юзерфрендлести дело.
Скорее всего была какаято техническая трудность в реализации рестрикшна.

юзерфредли, это когда тебя компилятор убережет от ошибки.
опытный программист с легкостью обойдет этот сурогатный рестрикшн  (минимальное или максимальное значения входия в множество любое значение)
а вот нубу, весьма тяжко понять суть поцесса, потому уберечь его от заведомой ошибки - святое дело.

Это сообщение отредактировал(а) Zloxa - 12.1.2010, 16:31


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Zloxa, вариант, но я на данном этапе вот так поступил:
Код

SELECT t.id, t.sub_id, s.dat FROM (SELECT * FROM `table` ORDER BY id) AS t INNER JOIN `stats` AS s ON s.id=t.id GROUP BY t.sub_id

мне кажется, проще будет?
PM MAIL   Вверх
Zloxa
Дата 12.1.2010, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(maxipub @  12.1.2010,  16:30 Найти цитируемый пост)
проще

не проще и не правильно.

Добавлено через 1 минуту и 27 секунд
Цитата(maxipub @  12.1.2010,  16:30 Найти цитируемый пост)
мне кажется

мне кажется что тебе еще слишком многому надо учитсья прежде чем пускаться в рассуждения.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Цитата(Zloxa @  12.1.2010,  16:26 Найти цитируемый пост)
думаю не юзерфрендлести дело.

А вот я как раз тоже придерживаюсь противоположного мнения.
Начинал еще в детстве, с Z80, бэйскиов да паскалей, поэтому с теми же типами переменных, их сравнениями и т.д. в вольном пхп путаницы не создаю.
А вот с СУБД не сталкивался.

Вы теперь мне предлагаете изучать классические строгие СУБД для того чтобы потом нормально работать с MySQL?
Это ли не то же самое, что учиться кататься на скейте, чтоб потом хорошо на велосипеде ездить, не находите?

Добавлено @ 16:34
Цитата(Zloxa @  12.1.2010,  16:32 Найти цитируемый пост)
не проще и не правильно

Почему не правильно? Работает корректно.

Это сообщение отредактировал(а) maxipub - 12.1.2010, 16:36
PM MAIL   Вверх
Zloxa
Дата 12.1.2010, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



maxipub, тебе действительно еще многому надо учиться, прежде ты поймешь что ошибка - не враг твой а друг твой. А тем более ошибка на этапе компиляции вместо заведомо недетерменированного набра в результате, который сегодня формируется вроде правильно, а заврта, внезапно, стал чудить.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Zloxa, так, а в чем там ошибка? smile 
PM MAIL   Вверх
Akina
Дата 12.1.2010, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(maxipub @  12.1.2010,  17:34 Найти цитируемый пост)
Почему не правильно? Работает корректно.

ПОКА работает корректно... но полагать. что так будет всегда - крайне неразумно.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
maxipub
Дата 12.1.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Akina, так можете объяснить, что не так с самом верхнем запросом на странице? Почему он не работает? И как надо его изменить - как вариант от Zloxa?

Цитата(Akina @  12.1.2010,  16:46 Найти цитируемый пост)
ПОКА работает корректно... но полагать. что так будет всегда - крайне неразумно.

А почему так? Мы же применяем необходимую сортировку, после группируем, далее джоин идет уже по чистым данным. Можно хоть пример того, что может привести к сбою?
PM MAIL   Вверх
Zloxa
Дата 12.1.2010, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Цитата(maxipub @  12.1.2010,  16:43 Найти цитируемый пост)
а в чем там ошибка? 

в ДНК.

Документация запрещает использовать в списке полей select выражения не перечисленные в group by и не являющиеся результатом аггрегатной функции, в случае, если значения этих полей могут быть не однозначны для группы. Маська не несет ответственности за то, что будет возвращать всегда ПЕРВОЕ попавшееся значение. Она обещает вернуть ЛЮБОЕ

тыкать на это место в документации я уже запарился. ИЩИ САМ.

Добавлено @ 16:56
Цитата(maxipub @  12.1.2010,  16:54 Найти цитируемый пост)
Мы же применяем необходимую сортировку

эта сортировка не должна влиять на результат выборки.
то что влияет - недоработка оптимизатора. Я б на его месте эту сортировку оптимизировал и был бы прав.

Это сообщение отредактировал(а) Zloxa - 12.1.2010, 16:57


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
maxipub
Дата 12.1.2010, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 517
Регистрация: 22.10.2009

Репутация: 1
Всего: 1



Zloxa, ну, а примерчик хоть какой-то для лучшего понимания можете предоставить?
PM MAIL   Вверх
Zloxa
Дата 12.1.2010, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



maxipub, зачем? 
Лучше ты мне докажи что я не прав.



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0666 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.