Перейти к содержимому

Сервис обмена электронных валют


Группировка записи

#1 кипятильник

кипятильник
  • Пользователь
  • 102 сообщений
  • Репутация: 0
0

Отправлено 13 Сентябрь 2010 - 21:35

есть к примеру запись в базе

# | имя | возвраст
1 | вася | 21
2 | петя | 22

при испльзование MIN(возвраст)
бывает часто выдает запись

2 | петя | 21

П.С. все персонажи выдуманные любые совпадения случайны :)

полный запрос

SELECT tire_catalog.*, tire_price.*, min(tire_price.price) AS minprice
FROM tire_catalog, tire_price
WHERE tire_catalog.id = tire_price.id_catalog
GROUP BY markatech, modeltech, sh, pr, ra, shyp
HAVING markatech = 'nokian'
ORDER BY minprice ASC

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 13 Сентябрь 2010 - 23:20

кипятильник,
Примерно понял в чем проблема, но без пачки данных и пива здесь не разобраться. Про пиво шучу конечно :) Вообщем покажи данные в личку и распиши запрос, что он у тебя ДОЛЖЕН делать.
  • 0

#3 кипятильник

кипятильник
    Topic Starter
  • Пользователь
  • 102 сообщений
  • Репутация: 0

Отправлено 14 Сентябрь 2010 - 10:12

tire_catalog это база с наименованиям товара.
tire_price это база с ценами и дополнительной инфой

tire_price есть одинаковые записи о товаре но поставщик (склад) к примеру разные и при груперовки оно выдает минимальную цену а поставщика любого тоесть не того у кого мин цена.
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Сентябрь 2010 - 10:42

кипятильник, сейчас не успеваю, вечером приду, помогу
  • 0

#5 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 14 Сентябрь 2010 - 14:24

Рекомендую не использовать конструкцию '*'. Лучше явно указывать поля.
Очень большие проблемы могут возникать при изменении структуры таблиц в будущем.
Вообще запрос с звездочкой считается табу среди программистов, только если ты просто не хочешь вытащить все для показа.
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Сентябрь 2010 - 22:30

кипятильник, вот такой вариант должен прокатить:
SELECT a.*,b.pole_naimenivania
FROM (SELECT * FROM tire_price ORDER BY price) a, tire_catalog b
WHERE b.id=a.id_catalog AND markatech = 'nokian'
GROUP BY a.id_catalog
ORDER BY a.price

Не понимаю, зачем ты группируешь по куче полей, если можно сгруппировать по id_catalog, как я понял там же разные товары с разными параметрами.
Если нет, то группируй по нужным полям, должно получаться всё хорошо.
Проблема заключалась в том, что при группировке выбирается за основу первая запись с которой группируется и к ней пристыковываются поля, которые используются с GROUP BY.
Что я сделал -> Сначала сделал выборку отсортированную по цене(price), а затем с этой выборкой работаю -> группирую по товару(id_catalog) и состыковываю с таблицей наименования товаров.
  • 0

#7 кипятильник

кипятильник
    Topic Starter
  • Пользователь
  • 102 сообщений
  • Репутация: 0

Отправлено 14 Сентябрь 2010 - 22:52

можно сгруппировать по id_catalog

там по id_catalog не получиться только так

>FROM (SELECT * FROM tire_price ORDER BY price) a, tire_catalog b
не могу понять что обозначают в этой строке a и b
  • 0

#8 кипятильник

кипятильник
    Topic Starter
  • Пользователь
  • 102 сообщений
  • Репутация: 0

Отправлено 14 Сентябрь 2010 - 23:06

ZiTosS Работает!!!, я в шоГе спасибо!
  • 0

#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 14 Сентябрь 2010 - 23:37

кипятильник,

>FROM (SELECT * FROM tire_price ORDER BY price) a, tire_catalog b
не могу понять что обозначают в этой строке a и b

в данном коде a и b это просто алиасы имен таблиц, чтобы длинные имена не писать. При создании алиасов полей нужно обязательно указывать оператор AS, в алиасах таблиц данный оператор можно опустить.
Рад был помочь :) Всегда пожалуйста!
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru