Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Экранирование специальных символов
 
 автор: elenaki   (17.11.2004 в 19:39)   письмо автору
 
 

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

соответственно, в таблице могут быть заполнены поля или только субкатегории, или субкатегории и марки, или все - субкатегории, марки и номера товара.

если наценка действует на всю категорию, то в полях "марка" и "id" я ставлю знак %.

если наценка действует только на марку в какой-то субкатегории, то % - только в поле "id", а субкатегория и марка заполнены.

после обновления (путем закачки нового прайса) большой таблицы нужно найти в ней те субкатегории, марки и/или отдельные товары, на которые установлена наценка и обновить ее, заполнив поле наценки в большой таблице, выбрав его из маленькой.

проблема в том, что запрос не желает выполняться, если я сравниваю с %. мне нужно выбрать строки, в которых определенное поле не равно "%". ставлю \ перед %
и все равно выбирает все. если делаю запрос типа:
select * from kerdos where (marka = "%" and id != "\%")

мне выдает все записи. а мне нужны только те, у которых заполнен id, т.е. стоит реальный 10-значный номер, а не %. наверно, не надо было связываться с % при заполнении таблицы наценок, но я теперь не помню, почему я ставлю именно %, а не 0 или просто пустое место. причем, если тот же запрос (только без слеша перед%) я делаю в MyPHPAdmin, то мне выдает то, что надо - все товары, у которых заполнен id.

пробовала и REGEXP (в MySQL), но или ошибку выдает или опять же - все записи.

замучилась. может, не связываться с SQL-запросами, а решить все с помощью PHP. когда получена строка из базы, проверять, что там в полях и в зависимости от наличия данных или % делать разные запросы на обновление большой таблицы?

   
 
 автор: cheops   (17.11.2004 в 22:52)   письмо автору
 
   для: elenaki   (17.11.2004 в 19:39)
 

Хм... если phpMyAdmin может, значит можно и из скрипта сделать - ведь PHP и MySQL и там и там одинаковые - сейчас набрасал похожую табличку попробовал и в phpMyAdmin, и в скрипте - вроде никаких накладок. Попробуйет SQL-запрос, который передаёте mysql_query() вывести в окно браузера - скопировать в phpMyAdmin и выполнить. Может символ где невидимый просачился или ещё чего.

PS У меня работает без экранирования.

   
 
 автор: elenaki   (18.11.2004 в 18:52)   письмо автору
 
   для: cheops   (17.11.2004 в 22:52)
 

спасибо. просто у меня не было возможности останавливать скрипт в нужном месте и проверять запрос. работала на чужом компе. попробую еще.

   
 
 автор: elenaki   (18.11.2004 в 21:44)   письмо автору
 
   для: elenaki   (18.11.2004 в 18:52)
 

$query = "SELECT * FROM kerdos WHERE (apopou = '$apopou')";
$result = @mysql_query($query) or die("$query <b>failed!</b><br>".mysql_error());
$number = mysql_numrows($result);

WHILE ($i < $number):
$subcat = mysql_result($result,$i,"subcat");
$marka = mysql_result($result,$i,"marka");
$id = mysql_result($result,$i,"id");
$kerdos = mysql_result($result,$i,"kerdos");

if (($marka == "%") && ($id == "%")) // есть только субкатегория
$query2 = "UPDATE poul_price SET  kerdos = '$kerdos' WHERE (subcat = '$subcat' and apopou = '$apopou')";
else if (($marka != "%") && ($id == "%")) // есть субкатегория и марка
$query2 = "UPDATE poul_price SET  kerdos = '$kerdos' WHERE (subcat = '$subcat' and marka = '$marka' and apopou = '$apopou')";
else if ($id != "%") // есть id (а значит, и субкатегория и марка, иначе быть не может)
$query2 = "UPDATE poul_price SET  kerdos = '$kerdos' WHERE (id = '$id' and apopou = '$apopou')";

$result2 = @mysql_query($query2) or die("$query2 <b>failed!</b><br>".mysql_error());
$i++;
ENDWHILE;


я сделала вот так. может быть, "достаю правой рукой левое ухо", но MySQL отказывается выбирать по условию !="%". а так, вроде, работает. если завтра клиент не заверещит, значит - все в порядке. ( условие apopou я выбираю выше, еще при выборе прайса)
спасибо Форуму!

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования