Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 190
от 14.12.2006, 23:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 395, Экспертов: 39
В номере:Вопросов: 2, Ответов: 4


Вопрос № 66222: Здравствуйте! Как правильно формулируется условие равенства для дробного поля? Никак не разберусь, где у меня ошибка. Есть поле price типа float. В ответ на запрос "(...)WHERE price=11.66(...)" MySQL возвраща...
Вопрос № 66283: Уважаемые эксперты, подскажите как (или напишите если не лень) SQL запрос (че то я не могу сообразить): надо проверить результаты национальной лотереи (6 из 54). В одной таблице результат розыгрыша - одна строка , шесть полей (шесть выигрышных чи...

Вопрос № 66.222
Здравствуйте!

Как правильно формулируется условие равенства для дробного поля?

Никак не разберусь, где у меня ошибка.

Есть поле price типа float. В ответ на запрос "(...)WHERE price=11.66(...)"
MySQL возвращает пустой результат, хотя такое значение точно в базе есть.
(Проверил, заменив "WHERE price=11.66" на "WHERE price BETWEEN 11.65 AND 11.67".) Проверяю через phpmyadmin. PHP: 4.4.2, MySQL: 4.1.16-nt

P.S. Еще один вопрос: как узнать дату создания/обновления таблицы?
Отправлен: 09.12.2006, 14:39
Вопрос задал: _Михаил_ (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Архангельский Андрей Германович
Здравствуйте, _Михаил_!
Для чисел с плавающй запятой нет точного значения. Оно всегда зависит от внутреннего представления в БД. Например, 11.66 на самом деле представлено как 11.6617256798
лучше задавать диапазон. Либо использовать целочисленные типы данных.
---------
Если дело заслуживает быть сделаным, то оно заслуживает чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Практикант)
Ответ отправлен: 09.12.2006, 14:53

Отвечает: Игорь Елизаров
Здравствуйте, _Михаил_!
дело именно в том, что это float . внутреннее представление данных такое, чо если Вы даже указываете точно 11.66, из-за внутреннего представления число в базе будет несколько иным, например 11.6600000012, а это уже не 11.66
выходом может быть либо округление данного числа до заданного количества разрядов (вроде бы это команда Round с указанием количества разрядов например WHERE round( price,2)=11.66) , либо использование диапазона, как вы и делали.
Ответ отправил: Игорь Елизаров (статус: 8-ой класс)
Ответ отправлен: 09.12.2006, 20:35
Оценка за ответ: 5


Вопрос № 66.283
Уважаемые эксперты, подскажите как (или напишите если не лень) SQL запрос (че то я не могу сообразить):
надо проверить результаты национальной лотереи (6 из 54). В одной таблице результат розыгрыша - одна строка , шесть полей (шесть выигрышных чисел). В другой таблице варианты что я заполнил, N-ное количество строк (вариантов), тоже естественно 6 полей. Надо из нее отобрать все записи в которых хотя бы три (или более) чисел совпадают с записью( выигравшими числами ) в первой таблице. Заранее спасибо.
Отправлен: 09.12.2006, 22:29
Вопрос задал: Alexander Babich (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Игорь Елизаров
Здравствуйте, Alexander Babich!
При указанной организации базы это будет весьма затруднительно.
предлагаю несколько иную структуру базы

база розыгрышей
id
номер розыгрыша
выпавшая цифра

то есть на каждый розыгрыш заводится 6 строчек

база Ваших вариантов должна выглядеть примерно так:

id
номер розыгрыша
номер карточки
цифра

также перечисляются для каждой карточки шесть полей

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

С уважением, Игорь
Ответ отправил: Игорь Елизаров (статус: 8-ой класс)
Ответ отправлен: 09.12.2006, 22:47
Оценка за ответ: 4

Отвечает: Синельников Сергей
Здравствуйте, Alexander Babich!

Предположим таблица V с полями V1,V2...V6 - выигрыш
таблица F с полями F1,...F6 - варианты, которые надо проверить.

SELECT F1,F2,F3,F4,F5,F6 FROM F,V WHERE
(iif((F1-V1)*(F2-V1)*(F3-V1)*(F4-V1)*(F5-V1)*(F6-V1)=0,1,0)+
iif((F1-V2)*(F2-V2)*(F3-V2)*(F4-V2)*(F5-V2)*(F6-V2)=0,1,0)+
iif((F1-V3)*(F2-V3)*(F3-V3)*(F4-V3)*(F5-V3)*(F6-V3=0,1,0)+
iif((F1-V4)*(F2-V4)*(F3-V4)*(F4-V4)*(F5-V4)*(F6-V4)=0,1,0)+
iif((F1-V5)*(F2-V5)*(F3-V5)*(F4-V5)*(F5-V5)*(F6-V5)=0,1,0)+
iif((F1-V6)*(F2-V6)*(F3-V6)*(F4-V6)*(F5-V6)*(F6-V6)=0,1,0))>=3

iif(условие, результат1, результат2) функция, которая выдает результат1, если условие истино или результат2 - если ложно. В стандарте SQL, да и во многих его диалектах используется Case... У Вас какая СУБД ?
Ответ отправил: Синельников Сергей (статус: 1-ый класс)
Ответ отправлен: 11.12.2006, 04:55


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное