Столкнулся с проблемой.
База MySQL, имеется таблица с текстовым полем 'strnum' (varchar)
в нем лежат числа в разном формате
2
3
10
20
11.2
14,4
44
мне нужно вытащить строки в определённом интервале
$_GET['num'] = 4;
$_GET['num'] = str_replace(",", ".", $_GET['num']);
"strnum >= '".$_GET['num'])."' AND strnum <= '".$_GET['num'])."'";
если в качестве разделителя указывать кавычки, то MySQL начинает искать как текст, сравнивая побитно
и под раздачу попадают 2,3,10,20
без кавычек всё обстоит по другому, но это не безопастно
Что можно ещё придумать?
Спустя 9 минут, 32 секунды (10.11.2010 - 14:25) Sanchopansa написал(а):
а разве можно сравнивать данные как числа если даже не понятно к какому типу данных их отнести? например такие данные из твоего списка 11.2 и 14,4.. если 11.2 еще подпадает под float то вот 14,4 это я уже хз.. тебе нада сначала както отформатировать данные
Спустя 5 минут, 26 секунд (10.11.2010 - 14:30) memba написал(а):
поэтому я делаю следующие
запятые меняем на точки.
$_GET['num'] = str_replace(",", ".", $_GET['num']);
запятые меняем на точки.
Спустя 2 минуты, 54 секунды (10.11.2010 - 14:33) Sanchopansa написал(а):
нуа в базе данные не отфильтрованы.. судя по твоему списку..
Цитата |
в нем лежат числа в разном формате 2 3 10 20 11.2 14,4 44 |
Спустя 1 минута, 46 секунд (10.11.2010 - 14:35) vasa_c написал(а):
Цитата |
без кавычек всё обстоит по другому |
Риальни?
Цитата |
но это не безопастно |
Ну так обезопасте данные из гета. Приведите к int'у, например.
Цитата |
Что можно ещё придумать? |
Данные, которые обрабатываются, как числа и хранить, как числа
Спустя 5 минут, 32 секунды (10.11.2010 - 14:40) memba написал(а):
про то что в базе, сорри я ошибся тут.. там отфильтровано.
vasa_c
да если убрать одинарные кавычки, то Мускул ищет как числа.
не могу я приводить к int, потому что там не только int, сейчас делаю так:
но это мне тоже не очень нравится
vasa_c
да если убрать одинарные кавычки, то Мускул ищет как числа.
не могу я приводить к int, потому что там не только int, сейчас делаю так:
function strtonumber($str)
{
$str = str_replace(",", ".", $str);
if( ! is_numeric($str)) $str = false;
return $str;
}
но это мне тоже не очень нравится
Цитата |
Данные, которые обрабатываются, как числа и хранить, как числа |
у меня данные могу быть как int так и float.
приводить всё к float и получать формат вида 2.0, я не могу
Спустя 8 минут, 3 секунды (10.11.2010 - 14:48) Sanchopansa написал(а):
function strtonumber($str)
{
$str = str_replace(",", ".", $str);
if( ! is_numeric($str)) $str = false;
return $str;
}
Цитата |
но это мне тоже не очень нравится |
так у тебя вся проблема в нравах?
ну чтоб больше нравилось (в плане безопастности) то почитай про такие функции в ПХП как
strip_tags, addslashes, htmlspecialchars
Спустя 28 секунд (10.11.2010 - 14:49) linker написал(а):
memba
Мускул не дурак, если поле имеет тип "число", то он не работает с ним как со строкой, сколько бы ты кавычек там не по-наставил. Если в поле могут присутствовать числа с плавающей точкой, то тип данного поля следует указывать аля "double".
Мускул не дурак, если поле имеет тип "число", то он не работает с ним как со строкой, сколько бы ты кавычек там не по-наставил. Если в поле могут присутствовать числа с плавающей точкой, то тип данного поля следует указывать аля "double".
Спустя 5 минут, 3 секунды (10.11.2010 - 14:54) memba написал(а):
Sanchopansa
кавычки, и спец символы все преобразуются, просто я тут не указывал
linker
Да, но у меня поле имеет тип varchar и мускул может работать с ним как с числом, если убрать кавычки.
вообщем нашёл оптимальное для себя решение
кавычки, и спец символы все преобразуются, просто я тут не указывал
linker
Да, но у меня поле имеет тип varchar и мускул может работать с ним как с числом, если убрать кавычки.
вообщем нашёл оптимальное для себя решение
SELECT * FROM `test` WHERE `strnum` < CAST('4' AS SIGNED)
Спустя 1 минута, 30 секунд (10.11.2010 - 14:55) linker написал(а):
memba
Цитата |
Да, но у меня поле имеет тип varchar и мускул может работать с ним как с числом, если убрать кавычки. |
И это ужасно.
Спустя 4 минуты, 11 секунд (10.11.2010 - 15:00) memba написал(а):
linker
Вы читаете историю сообщений? )
у меня числа хранятся как вида int так и float
конечно можно всё привезти к float , но тогда целые числа будут иметь вид 3.0
И это не подходит.
Вы читаете историю сообщений? )
у меня числа хранятся как вида int так и float
конечно можно всё привезти к float , но тогда целые числа будут иметь вид 3.0
И это не подходит.
Спустя 30 минут, 4 секунды (10.11.2010 - 15:30) linker написал(а):
Цитата |
Да, но у меня поле имеет тип varchar |
Чьи это слова?
Число "3.0" ничем не отличается от "3", именно поэтому в таблицу будет заноситься "3", а не "3.0". Соответственно и вывод тоже будет содержать "3".
Спустя 8 минут, 5 секунд (10.11.2010 - 15:38) memba написал(а):
ещё я написал что если поле привести к типу float
то при добавление числа '3' ... оно сохраняется как 3.0
а на счёт varchar ...
то при добавление числа '3' ... оно сохраняется как 3.0
а на счёт varchar ...
Цитата |
у меня числа хранятся как вида int так и float |
имеется ввиду ВИД .. а не ТИП
Спустя 29 минут, 4 секунды (10.11.2010 - 16:07) linker написал(а):
DOUBLE, не надо ничего переводить, просто заносишь в таблицу "3", "3.0", "3.565443" и не паришься
CREATE TABLE `test` (
`num` DOUBLE NOT NULL DEFAULT '0'
) TYPE = MYISAM ;
INSERT INTO `test` VALUES ('3')
INSERT INTO `test` VALUES ('3.0')
INSERT INTO `test` VALUES ('3.565443')
SELECT * FROM `test`
Вывод:
3
3
3.565443
Спустя 2 минуты, 52 секунды (10.11.2010 - 16:10) memba написал(а):
не знал, попробуем