![]() |
|
Модераторы: skyboy |
![]()
|
|
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
Две таблицы, связь многие ко многим.
Если из первой суммировать значения по определенному полю, то мы получаем то, что есть на самом деле. Но если при этом сделать left join table2, то есс-но наша сумма возрастет в разы. -------------------- менеджер по кодеврайтингу |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 8 Всего: 31 |
Bulat, да так и есть. в чем проблема? что хотим получить?
|
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
sir_nuf_nuf, хотим получить методы борьбы с этим вообще, если таковые имеются. Ибо, джойнить таблицы нужно, и каждый раз уходит в составление очень сложных запросов надоело
-------------------- менеджер по кодеврайтингу |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
муа-ха-ха. месье хочет извращений? по рукам!
идея в том, что поле первичного ключа первой таблицы повторится столько же раз в результате, сколько и суммируемое поле. следовательно, "count(distinct table1.primary_key) / count(table1.primary_key)" даст количество повторений, то есть количество присоединяемых из второй таблицы строк. можно было просто поделить сумму на count(table2.primary_key), но в случае, если из второй таблицы подключается 0 строк, пришлось бы для избежания деления на 0 вставлять IF. Добавлено через 1 минуту и 47 секунд бороться с тем, что "2 + 2 = 4 в десятичной системе счисления" - донкихотство и/или наивность. |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
Не ожидал услышать от тебя такие глупости. А насчет извращений, уж проще попытатся побороть то, что 2+2 > 4 чем расписывать джойны в виде join ( select ... ) а после него еще и union ( ) -------------------- менеджер по кодеврайтингу |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
ну, так, я вообще на глупости горазд. в результате умножения таблиц получаем, что некоторые поля дублируются. неожиданно? в результате сложения продублированных значений получаем сумму, отличную от суммы однократно учтенных значений. неожиданно? ты пытаешься минимизировать количество запросов и из-за этого пеняешь на вполне адекватное поведение группировки. |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Как организована связь? через третью таблицу? или еще как? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| sir_nuf_nuf |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 920 Регистрация: 6.1.2008 Репутация: 8 Всего: 31 |
Bulat, есть реляционная алгебра. Там сказано, что функции, равно как и агрегатные функции применяются к ТАБЛИЦЕ (а не к двум)
Когда вы джойните две таблицы, - получаете одну, в которой данные избыточны (денормализованы) - именно для этого джойн и создан - собирать данные из нормализованных таблиц. поэтому , если вы хотите иметь какую либо сумму, по одной таблице - ее нужно считать до джойна. например:
|
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |