SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 28.02.2009 19:42:43

lexxkn
Участник
Зарегистрирован: 28.02.2009
Сообщений: 8

Помогите плиз с запросом

Задача запроса в том, чтобы выбрать минимальное значение столбца sell (float), но с условием что значение > 0 и для определенного товара (ttid)

Вот что я пытался писать, но выдает белеберду

SELECT MIN( sell ) AS SELL FROM items WHERE ttid =7099 AND sell>0
SELECT MIN( sell ) AS SELL FROM (SELECT sell FROM items WHERE ttid =7099 AND sell>0) AS tmtable

Неактивен

 

#2 28.02.2009 19:48:41

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Помогите плиз с запросом

Нужно минимальный среди положительных? Или не включать значение в выборку если MIN(sell) <= 0?

Неактивен

 

#3 28.02.2009 19:51:59

lexxkn
Участник
Зарегистрирован: 28.02.2009
Сообщений: 8

Re: Помогите плиз с запросом

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

Неактивен

 

#4 28.02.2009 19:58:38

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Помогите плиз с запросом

SELECT MIN( sell ) AS SELL FROM items WHERE ttid =7099 AND sell>0

Этот запрос должен выбирать минимальное значение, среди положительных sell у товара ttid =7099;
или NULL, если таких записей нет.

lexxkn написал:

но выдает белеберду

А конкретней?

Неактивен

 

#5 28.02.2009 20:07:57

lexxkn
Участник
Зарегистрирован: 28.02.2009
Сообщений: 8

Re: Помогите плиз с запросом

coin написал:

SELECT MIN( sell ) AS SELL FROM items WHERE ttid =7099 AND sell>0

Этот запрос должен выбирать минимальное значение, среди положительных sell у товара ttid =7099;
или NULL, если таких записей нет.

lexxkn написал:

но выдает белеберду

А конкретней?

Для данного примера (ttid =7099) в таблице порядка 120 значений. Из них больше половины значений поля sell = 0, остальные от 1 до 50.
На выходе этого запроса я получаю 0,100000128

У меня такое ощущение что он считает среднее значение, а не минимальное

Если из запроса убрать AND sell>0, то тогда нормально выводит значение 0

Отредактированно lexxkn (28.02.2009 20:11:17)

Неактивен

 

#6 28.02.2009 20:19:39

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Помогите плиз с запросом

Значения float хранятся в приближённом виде и, вероятно, часть нулей на самом деле не нули, а числа приближённые к нулю. Попробуйте так:

SELECT MIN( sell ) AS SELL FROM items WHERE ttid =7099 AND sell>0.15


Просмотрите результаты запроса:
SELECT * FROM items WHERE ttid =7099 AND sell>0 ORDER BY sell ASC LIMIT 5

Может всё-таки в таблице есть такие значения как 0,100000128?

Отредактированно coin (28.02.2009 20:26:14)

Неактивен

 

#7 28.02.2009 20:53:29

lexxkn
Участник
Зарегистрирован: 28.02.2009
Сообщений: 8

Re: Помогите плиз с запросом

После выполнения запроса
SELECT MIN( sell ) AS SELL FROM items WHERE ttid =7099 AND sell>0.15
Выдает значение 0,5

Проверил все значения, есть только 2 со значениями 0,1

Специально даже сделал запрос
SELECT * FROM `items` WHERE `sell`= 0,100000128
Который вернул 0 строк.


Может мне проще частично выгрузить базу и выложить для скачивания, чтобы Вам было на чем проверить
А я пока временно сделаю выбор наименьшего на пхп, чтобы сервис хоть как-то протестить на наличие ошибок.

Неактивен

 

#8 28.02.2009 20:56:11

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Помогите плиз с запросом

Поставьте порог немного ниже
SELECT MIN( sell ) AS SELL FROM items WHERE ttid =7099 AND sell>0.00001

Второй запрос возвращает строки с заданным фиксированным значением, неудивительно, что вернул пустой результат

Неактивен

 

#9 28.02.2009 21:11:31

lexxkn
Участник
Зарегистрирован: 28.02.2009
Сообщений: 8

Re: Помогите плиз с запросом

После убийства всех значений <1 запрос сработал нормально.
Все-таки он воспринимал значение 0,1 как 0,100000128. Хотя при записи в таблицу указывается именно 0,1

Буду обрезать значение на выходе тогда

Неактивен

 

#10 28.02.2009 21:15:44

coin
Гуру
Зарегистрирован: 15.07.2008
Сообщений: 66

Re: Помогите плиз с запросом

Если нужна точность, используйте тип DECIMAL.

Неактивен

 

#11 28.02.2009 21:21:26

lexxkn
Участник
Зарегистрирован: 28.02.2009
Сообщений: 8

Re: Помогите плиз с запросом

coin написал:

Если нужна точность, используйте тип DECIMAL.

Уже делаю. Оставлю 3 знака после точки


Всем спасибо за помощьwink

Неактивен

 

#12 10.03.2009 16:34:02

smackthat
Завсегдатай
Зарегистрирован: 18.02.2009
Сообщений: 32

Re: Помогите плиз с запросом

Привет, помогите с запросом: пытаюсь просто вставить несколько полей:


INSERT INTO `antostudio`.`articles2`
                    (`id`,`name`,`category`,`text`)
                    VALUES(NULL,`lalalalalla`,`$article_category`,'$article_text');
 

Названия полей правильны, и порядок их следования тоже. При выполнении пишет ошибку такую:
Unknown column 'lalalalalla' in 'field list'

Но как же неизвесная, я ведь перед этим указал поля, а теперь их значения. что не так я сделал?

Неактивен

 

#13 10.03.2009 16:49:23

smackthat
Завсегдатай
Зарегистрирован: 18.02.2009
Сообщений: 32

Re: Помогите плиз с запросом

хуху! нашел! надо вместо ` использовать '

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson