Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Интерестная задачка про Group (Ронзин Роман) 24/09/2002 - 11:52:23
      Re: Интерестная задачка про Group (walrus) 24/09/2002 - 22:36:45
      Re: Интерестная задачка про Group (Ронзин Роман) 25/09/2002 - 12:02:01
      Re: Интерестная задачка про Group (vi.k) 26/09/2002 - 05:21:00
      Re: Интерестная задачка про Group (walrus) 28/09/2002 - 10:52:25
      Re: Интерестная задачка про Group (vi.k) 29/09/2002 - 05:17:48
      Re: Интерестная задачка про Group (walrus) 29/09/2002 - 21:04:39
      Re: Интерестная задачка про Group (vi.k) 30/09/2002 - 14:55:38
      Re: проблема с агрегатной UDF avgcost (Tamara) 28/11/2003 - 11:09:55

> Original message text:
> From: Ронзин Роман - 24/09/2002 - 11:52:23
> Subject:Интерестная задачка про Group
> -----------------
> "Мы знаем, что эта задача не имеет решения, мы хотим знать как ее решать..."
> А и Б. Стругатские. "Понедельник начинается в субботу"
>
>
> Итак. Есть описение товара состоящее из названия и кучи параметров. Название храниться в одной таблице(product) названия параметров(fields) в другой, а их значения в третьей(value). Все это связано через таблицу case(field_id,value_id,product_id).
> Надо выбрать описание каждого товара в виде (название парам1:значение1 парам2:значение2... парамN:значениеN) одним запросом.
>
> Была идея групировать по product.id обьединяя параметры, но sum не работает со строками, а concat не работает с групировкой.
> В общем наметился тупик который (из соображений экономии времени)
> разрешился обработкой результатов на PHP.
> А задачка осталась.
> Если есть идеи - пишите.
>
>
>


From: vi.k - 26/09/2002 - 05:21:00
Subject:Интерестная задачка про Group
-----------------
Вариант 1 - Все параметры в одном поле
Тут нужна UDF
Я делал агрегатную (т.е. работает при GROUP BY) функцию strgrp(), которая выдаёт примерно то, что тебе нужно. Одна проблема - отсутствует сортировка. Т.е. - как в MySQL'е хранится - так всё и будет. ORDER BY не поможет. А реализовать сортировку самому - мне всё некогда было.

Вариант 2 - каждый параметр в своём поле.
Тут однозначно одним запросом никак.
Но двумя можно. Первый - список всех параметров (field_id и field_name).
Вторым - запрос с кучей JOIN'ов по каждому JOIN'у на параметр:

Примерно так (может не совсем понятна реализация, но главное понять суть):
select
v1.value,
v2.value,
v3.value,
...
from values v1
inner join values v2 using (product_id)
inner join values v3 using (product_id)
...
where v1.value_id=1
and v2.value_id=2
and v3.value_id=3
...

И кстати, работает не так быстро как хотелось бы...

Вариант 3 - Через переменные
Я не смог побороть. Дня два вроде угрохал, так и не вышло.
MySQL оптимизирует запросы. Хоть и подставляешь CONCAT, а он её только один раз вычисляет для группы и использует далее как константу. Как-то заставлял его чтоб он вычислял для каждого (не помню как), но тогда другие баги вылазили - сейчас уже и не вспомню.
Оказалось гораздо проще написать свою UDF.

Но если у тебя выйдет - будь добр, кинь сюда в форум решение. Думаю многим пригодилось бы. Тут не раз нечто подобное требовалось.


P.S. Так ли необходима таблица связки?
Может достаточно будет в таблицу values добавить поля product_id, field_id?



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
11896



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |