[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Ошибка в mysql (ручная правка данных)
Sergen
Доброго времени суток.
Столкнулся с ошибкой, суть которой я понять так и не смог. Короче история. Есть поле с ценами, но они хранятся ни как числа, а как строки (Для наглядности хранятся с пробелами, например- 3 500). Тип полей varchar.

При добавлении данных, в коде происходит проверка. Вытаскиваю из этого поля цену, удаляю пробел и сравниваю с вносимыми данными. Если они например меньше, то делаю в этом поле UPDATE. Т.е. новое число перевожу обратно в строку(с пробелом) и в базу. Все работает, все хорошо, но.

Если я залазию в mysql в это поле, и вручную меняю с 3 500 на 3 300, после такой правки вручную, код эту ячейку не апдейтит. Почему такое?



Спустя 8 минут, 49 секунд (31.10.2011 - 20:16) imbalance_hero написал(а):
Sergen
где код? Почему хранишь так криво цены? Есть же int, float

Спустя 14 часов, 13 минут (1.11.2011 - 10:29) Sergen написал(а):
imbalance_hero, почему так криво храню цены? Тут в общем было сделано из-за такого соображения. Цены добавляются раз в полгода, а выводится должны чаще. Просто подумал, зачем я буду вертеть через функции каждый раз при выводе, уж лучше загоню их в таком виде в базу и все.
Ну в принципе, может и стоит и в int или char.
Код простой, ничего сложного

$k1_min = (prob($mr[k1_min ])); // "старая" запись. через фун. prob- удаляю пробел

if($k1_min > $f_k1_min) // $fk_1_min- новая запись, без пробелов
{ $f_k1_min=ch($f_k1_min); // ch - добавить пробел

$resuly=mysql_query ("UPDATE mo_ob SET k1_min ='$f_k1_min' WHERE sez = '$sez' ");
if(!$resuly) die ("Сбой" . mysql_error()) ;
}

Вопрос, почему в ячейке, меняя вручную одну цифру в строке, она потом не обновляется?

Спустя 11 минут, 52 секунды (1.11.2011 - 10:41) Игорь_Vasinsky написал(а):
Может стоит пересмотреть алгоритм? зачем эти тёрки с пробклами при вставки, при update?

По моему разумней хранить данные в том виде - в котором удобней с ними работать - а красивыми их делать только при выводе для пользователя?



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

$resuly=mysql_query ("UPDATE `mo_ob` SET  `k1_min` ='".$f_k1_min."'  WHERE `sez` = '".$sez."'") or die(mysql_error());  

//Посмотри как выглядит твой запрос.
echo "UPDATE `mo_ob` SET `k1_min` ='".$f_k1_min."' WHERE `sez` = '".$sez."'";

Спустя 2 часа, 39 минут, 17 секунд (1.11.2011 - 13:20) linker написал(а):
Храни цены в FLOAT, расставить запятые, точки, пробелы можно и с использованием number_format()
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.