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



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

#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

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Помогите: Нужно вывести последние записи из SQL
  2. Таблица записи на прием.
  3. Вопрос по организации страниц
  4. Сгруппировать записи по полю вернуть по одной случайной записи
  5. Группировка записи средаствами sql

#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