Настройки для SELECT MAX()

Pin

Новичок
Настройки для SELECT MAX()

А есть ли настройки среды влияющие на select max()?
А то у меня результаты поиска получаются только в пределах однозначных чисел - т.е. до 9ти. И для меня это большая запинка!

Не знаете, как заставить его работать со всеми числами???
Всем спасибо!
 

Demiurg

Guest
еще раз, только попонятнее и с примерами.
 

chira

Новичок
Pin
ты используешь MAX() для символьного или числового поля?
 

Pin

Новичок
поле типа varchar (15..30). там есть записи с индексами, хочу выделить максимальный , а мне возвращается максимум 9. Как быть с 2хзначными числами?
 

Pin

Новичок
вызвал. но поле типа varchar, т.к. у некоторых индексов будут буксенные пометки. Но пока их нет.
 

Pin

Новичок
Я же объяснил - пока нет пометок. Но на однозначных числах работает, а на 2хзначных - нет.
 

Фанат

oncle terrible
Команда форума
потому и не работает, чудик, что у тебя строки, а не числа

ты САМ сначала определись, что тебе нужно - макс или буковки, а потом базу мучай
 

Pin

Новичок
Мда... select max() в пределах varchar не наботает. Блин, ман столько раз перечитывал и об этом - ни слова. Жаль, нет автоопределения класса. Вот так и получается.
Придется отказаться от задумки с буквенными метками.
Всем спасибо.
 

Crazy

Developer
Автор оригинала: Pin
Мда... select max() в пределах varchar не наботает.
Прекрасно работает.

Блин, ман столько раз перечитывал и об этом - ни слова.
О чем "об этом"? MySQL сравнивает строки в точности так, как это делает подавляющее большинство языков программирования. Если лично ты не понимаешь, как это делается -- это не проблема MySQL.

Жаль, нет автоопределения класса.
Автоопределения чего?
 

Pin

Новичок
Crazy, зря ты так. Переделал столбец VARCHAR на INTEGER - всё прекрасно заработало.

(то, где ты цитируешь класс = тип столбца, неправильно выразился)

Вот о том, что некорректно работает в первом случае и не написано в мане (я вроде бы в предыдущем посте так и написал).
 

si

Administrator
Вот о том, что некорректно работает в первом случае и не написано в мане
работает корректно как уже сказал Crazy, ты некоректно понимаешь сравнение строк
 

Crazy

Developer
Автор оригинала: Pin
Вот о том, что некорректно работает в первом случае и не написано в мане (я вроде бы в предыдущем посте так и написал).
Повторяю медленно. Специально для тех, кто не понимает с первого раза.

Чтобы найти максимум -- нужно сравнить значения, не так ли? Открываем мануал и смотрим, как выполняется сравнение:

MySQL performs comparisons using the following rules:
* If one or both arguments are `NULL', the result of the comparison is `NULL', except for the `<=>' operator.
* If both arguments in a comparison operation are strings, they are compared as strings.
* If both arguments are integers, they are compared as integers.
* Hexadecimal values are treated as binary strings if not compared to a number.
* If one of the arguments is a `TIMESTAMP' or `DATETIME' column and the other argument is a constant, the constant is converted to a timestamp before the comparison is performed. This is done to be more ODBC-friendly.
* In all other cases, the arguments are compared as floating-point (real) numbers.
Когда max() работает над столбцом типа varchar, то оба аргумента в сравнении -- строки. Этот случай я и отметил в цитате.

Известно, что "9" больше, чем "10", поскольку сравнение выполняется для строк посимвольно слева направо, а "9" больше "1".

Мораль: книжки -- читать, траву -- курить. Не наоборот.
 

Pin

Новичок
Не знаю, может у меня ман какой левый, но строку

"* If both arguments in a comparison operation are strings, they are compared as strings."

я не нашел. (ман у меня вместе с EMS Mysql Manager'oм поставлялся, возможно, там урезанная версия). вот и пришлось мне разницу механизма сравнения строк и чисел на практике познавать.

2 Фанат : я так и сделаю.

Ладно, спасибо всем, кто пытался помочь...
 
Сверху