Выборка из таблицы строки с минимальным значанием одного из полей

gv0zd

Новичок
Выборка из таблицы строки с минимальным значанием одного из полей

Уперся в сложный запрос, который никак не могу написать.

В ситуациях, когда наступает ступор всегда стараюсь идти от простого к сложному.
Пишу простенький запрос, если он работает, то накручиваю на него вские джоины и прочее, пока не получится. То что хочу.

Но в этот раз выходит так, что не могу решить самый простой запрос:(

Помогите пожалуйста и не смейтесь, пжлст, я только учусь

Вот учебные данные.
Учиться будем на спортинвертаре.

таблица sport

id|name|color|kg

1|штанга|черная|80
2|блин|красный|15
3|гантеля|синяя|7


В результате мне нужно получить строку с минимальным весом изделия, т.е.
3|гантеля|синяя|7

Понятно что наипростейшим запросом будет
SELECT * FROM `sport` ORDER BY `kg` ASC LIMIT 0, 1

Но суть в том, что для более сложного запроса, в котором будет учавствать данный запрос нужно сделать выборку через MIN() и без LIMIT

Именно это у меня и не получается. Вроде просто, а не получается. Помогите, пожалуйста.
 

gv0zd

Новичок
Да собственно никак без лимита не могу получить одну строку в ответе. Если начинаю, хоть по чему-то группировать, то строк сразу 3
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Запрос покажешь?
 

Beavis

Banned
gv0zd
если не получается - сделай два запроса)
или один с подзапросом
 

gv0zd

Новичок
SELECT MIN(kg) FROM `sport` выдает просто одно число
если только добавляешь еще какое-то поле то нужно уже грппировать
SELECT name, MIN(kg) FROM `sport` GROUP BY id
Уже 3 строки

Не хочется делать нескольок запросов или подзапросы
Дело в том, что приведенный пример, это основа большого запроса, в которм будет объединяться три таблицы

Неужели из мускула нельзя вытащить нужные мне данные
Ну даже эксель это делает:)

-~{}~ 21.03.08 00:03:

SELECT MIN(s.kg), s2.name FROM `sport` as s LEFT JOIN `sport` as s2 ON s.id = s2.id GROUP BY s.id опять выдает несколько строк

Если в структура добавить еще одну колонку, допустим категория и во все строки сделать значение "инвентарь", а затем при запросе сгруппировать по этому полю, то выйдет одна строка, вытянется минимальная масса, но вот остальные поля подтянутся неправильно

-~{}~ 21.03.08 00:10:

Вот что я имею в виду

таблица sport

id|category|name|color|kg

1|инвентарь|штанга|черная|80
2|инвентарь|блин|красный|15
3|инвентарь|гантеля|синяя|7

И делаем запрос

SELECT id, name, color, MIN(kg) FROM `sport` GROUP BY category

Получаем вместо правильного
3|гантеля|синяя|7

Неправильный
1|штанга|черная|7

Т.е. находит минимальную массу, а к ней подтягивает просто значения других полей из первой строки...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Т.е. находит минимальную массу, а к ней подтягивает просто значения других полей из первой строки...
[telepat_mode]

А это потому, что числовые данные нужно хранить в предназначеном для этого формате - ЧИСЛОВОМ.

А у тебя скорее всего в СТРОКОВОЙ тип поля.

[/telepat_mode]
 

gv0zd

Новичок
нет, все как положено

-~{}~ 21.03.08 10:29:

Могу дамп таблички запостить
 

zerkms

TDD infected
Команда форума
Т.е. находит минимальную массу, а к ней подтягивает просто значения других полей из первой строки...
вопрос обсуждается несколько раз в месяц точно. не ранее чем неделю назад был такой же...

думаю что ФAНАТ'у уже можно сделать на пхпфаке соответствующий раздел и туда ссылать людей :)
ps: понимаю что это уже скорее mysqlfaq, но тем не менее :)
 

gv0zd

Новичок
zerkms
Я написал что я учусь, как видно из моего поста другие методы тоже ищу, не сижу сложа руки, но не получается. Если есть решение подскажите, пожалуйста и я подскажу тому кто в след раз спросит:)


Roman777
А без вложенного запроса можно это сделать?
Моя версия mysql не поддерживает вложенные запросы

-~{}~ 21.03.08 16:03:

Все работает
Я пошел другим путем

Установил себе другую версию мускула и хостера добил, чтоб он сделал это же:) Теперь и у меня есть вложенные запросы.
 
Сверху