Arina
Гость
|
|
« : 02-06-2004 15:53 » |
|
Вот такая ерунда: SELECT a, 3-a as diff FROM tbl_name; В результате получаю: а | diff -- --- 2 0 2 0 3 -1 1 1 Почему так происходит, подскажите?
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #1 : 02-06-2004 16:12 » |
|
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Arina
Гость
|
|
« Ответ #2 : 02-06-2004 16:20 » |
|
щас попробую
|
|
|
Записан
|
|
|
|
Arina
Гость
|
|
« Ответ #3 : 02-06-2004 16:21 » |
|
не помогло.... а вот Код: SELECT a, a+3 as diff FROM tbl_name; это работает
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #4 : 02-06-2004 19:28 » |
|
Arina, сккажи, чем пользуешься - какая БД?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
HandKot
Молодой специалист
Offline
|
|
« Ответ #5 : 03-06-2004 05:11 » |
|
Arina, такое ощущение что у тебя в запросе вместо 3 2 стоит
SELECT a, 2-a as diff FROM tbl_name;
тогда и ответы будут как у тебя
|
|
|
Записан
|
I Have Nine Lives You Have One Only THINK!
|
|
|
Arina
Гость
|
|
« Ответ #6 : 03-06-2004 07:51 » |
|
Использую MySQL 4.0 Запрос элементарен: select a, 3-a as diff from table_name; там именно 3 - обычной цифрой, а считает, действительно, будто стоит 2
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #7 : 03-06-2004 08:03 » |
|
чудес не бывает..... а пробовала select a, -a+3 as diff ... ?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #8 : 03-06-2004 08:05 » |
|
Arina, проверил на 4.0.18 и 3.23.49 - работает нормально. Попробуй что-то поменять. Напр., используй другую таблицу, другой тип столбца и его атрибутов.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Arina
Гость
|
|
« Ответ #9 : 03-06-2004 08:09 » |
|
в общем-то, тип поля: a enum('0','1','2','3') - может в этом все дело?
Сейчас изменила a enum('1','2','3') - и все нормально стало работать. Странно.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #10 : 03-06-2004 08:28 » |
|
блин ничего странного. ты его объявила не целым, а множеством, третий элемент которого - 2. в селекте ты обращаешься к второму элементу этого множества (по его индексу), т.е. фактически, ты пишешь 2 - а.
|
|
|
Записан
|
|
|
|
Arina
Гость
|
|
« Ответ #11 : 03-06-2004 08:37 » |
|
x77, не поняла - почему обращаюсь ко 2 элементу? select a(первый элемент), 3-a(второй элемент) - так что-ли? А ведь у меня определены все а - разве не должен селект выбирать построчно значения: а=3=>3-a=0 а=2=>3-a=1 а=3=>3-a=0 а=1=>3-a=2
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #12 : 03-06-2004 08:43 » |
|
вообще говоря, в майскл в выражениях, содержащих перечисляемые типы (т.е. енумы) цифры трактуются как индексы енумов. поэтому енумы не рекомендуется использовать для хранения цифр, только строк, во избежание путаницы. у тебя оно не начало правильно работать просто под индексом третьего элемента у тебя сейчас стоит не 2, как раньше, а 3. напиши, например, 10-а - и будут те же грабли. корректное решение - это изменить тип на целочисленный. можно, по идее, приводить енум к стрингу, как это делает Load Data, например, но в любом случае будет путаница и заморочки.
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #13 : 03-06-2004 08:48 » |
|
Arina, нет. у тебя есть енум: индекс 1 2 3 4 элемент 0 1 2 3
ты пишешь select a, 3-a это то же самое, что select a, a[3] - a. в первом случае a[3] было равно 2. потом ты убила первый элемент, ноль, индексы сместились, a[3] стало равно 3. и ты решила, что всё заработало. на самом деле, это не так
|
|
|
Записан
|
|
|
|
Arina
Гость
|
|
« Ответ #14 : 03-06-2004 10:04 » |
|
ok, спасибо за науку:)
изменю тип:)
|
|
|
Записан
|
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #15 : 03-06-2004 10:22 » |
|
Arina, удачи
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #16 : 03-06-2004 10:40 » |
|
ты пишешь select a, 3-a это то же самое, что select a, a[3] - a. в первом случае a[3] было равно 2. потом ты убила первый элемент, ноль, индексы сместились, a[3] стало равно 3. и ты решила, что всё заработало. на самом деле, это не так x77, что-то я не понимаю, как у тебя константа "3" превратилась в "a[3]"? Arina, рекомендую почитать мануал mysql-я, раздел "MySQL Language Reference" - в описании каждого типа рассказывается о его поведении. А так же почитай там же о интерпретации и преобразовании типов в выражениях. If you retrieve an ENUM in a numeric context, the column value's index is returned.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #17 : 03-06-2004 11:17 » |
|
RXL, в данном случае не константа, а индекс элемента. чтобы получить значение самого элемента. в мануале, кстати, чуть ниже твоей цитаты есть такие строчки: For example, you can retrieve numeric values from an ENUM column like this:
mysql> SELECT enum_col+0 FROM tbl_name;
т.е. здесь идёт обращение к 0-му элементу. а Arina обратилась к третьему, вот и всё.
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Offline
Пол:
|
|
« Ответ #18 : 03-06-2004 11:54 » |
|
x77, тут вовсе не ображение к нулевому элементу. "+0" - это принудительный перевод к числовому контексту. Результат - index+0.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
x77
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #19 : 03-06-2004 12:03 » |
|
RXL, дома проверю, здесь у меня нет рабочей базы. отложим до завтра, ok?
|
|
|
Записан
|
|
|
|
|