|
|
|
| Приведенный ниже скрипт работает но обновляет данные в базе только по id. Как построить запрос к базе, чтоб он еще проверял соответствие второго столбца `code` ?
[code][
<?
$arr = file("Полная база.txt");
$sql = array();
for($i = 0; $i < count($arr); $i++)
{
$arr[$i] = trim($arr[$i]);
$line = explode("\t", $arr[$i]);
$sql[] = "('{$line[0]}',
'{$line[1]}',
'{$line[2]}',
'{$line[3]}',
'{$line[4]}',
'{$line[5]}',
'{$line[6]}',
'{$line[7]}'
)";
if ($line[3]>=1)
{
$line[3]=$line[3]-$line[3]*0.05
;
echo "<pre>";
print_r($line[3]);
echo "</pre>";
}
$query = ("UPDATE `trika_towar`
SET `price`=$line[3]) WHERE `id`=$line[0]");
mysql_query($query) ;
}
if(!mysql_query($query)) exit("Запрос не выполнился по тому, что ".mysql_error());
?>
/code] | |
|
|
|
|
|
|
|
для: maxim14
(04.04.2011 в 18:22)
| | >чтоб он еще проверял соответствие второго столбца `code` ?
А соответствие столбца `code` чему? | |
|
|
|
|
|
|
|
для: cheops
(04.04.2011 в 18:53)
| | >>чтоб он еще проверял соответствие второго столбца `code` ?
>А соответствие столбца `code` чему?
$line[1] то есть они должны быть одинаковы, а при отсутствии соответствий создавать новую строку и вносить данные из текста | |
|
|
|
|
|
|
|
для: maxim14
(04.04.2011 в 18:54)
| | Хм... а может проще столбец code проиндексировать уникальным ключом? Тогда вставить данные с дублирующей записью просто не получится. | |
|
|
|
|
|
|
|
для: cheops
(04.04.2011 в 22:02)
| | Понимаете в чем смысл - в базе уже есть товары, а нужно на имеющиеся сделать скидку 5% от цены в текстовом документе и добавить недостающие товары | |
|
|
|
|
|
|
|
для: maxim14
(05.04.2011 в 17:06)
| | Тогда перед добавлением придется делать SELECT-запрос, проверяющий имеется ли в таблице запись с таким code. | |
|
|
|
|
|
|
|
для: cheops
(05.04.2011 в 18:58)
| | Это я понял. Примерно так?
<?
$arr = file("Полная база.txt");
$sql = array();
for($i = 0; $i < count($arr); $i++)
{
$arr[$i] = trim($arr[$i]);
$line = explode("\t", $arr[$i]);
$sql[] = "('{$line[0]}',
'{$line[1]}',
'{$line[2]}',
'{$line[3]}',
'{$line[4]}',
'{$line[5]}',
'{$line[6]}',
'{$line[7]}'
)";
$line[3]= $line[3]-($line[3]*0.05);
echo "<pre>";
print_r($sql);
echo "</pre>";
if (mysql_quere(SELECT * FROM trika_towar WHERE code= $line[1]");
{
$status= 1 ;
$query1= ("UPDATE trika_towar SET price=`$line[3]`,p1004=`$line[3]`, status = `$status` WHERE code= `$line[1]` ");
mysql_query($query1);
}
else
{
$query = (" INSERT INTO`trika_towar`(`code`, `name`,`price`, `fas`, `doza`, `made`, `made_country`) VALUES ($line[1],$line[2],$line[3],$line[4],$line[5],$line[6],$line[7]");
mysql_query($query);
}
}
if(!mysql_query($query)) exit("Запрос не выполнился по тому, что ".mysql_error());
?>
|
Только вот с синтаксисом разобраться не могу | |
|
|
|
|
|
|
|
для: maxim14
(05.04.2011 в 19:22)
| | Переделал код вот так:
<?
$arr = file("Полная база.txt");
$sql = array();
for($i = 0; $i < count($arr); $i++)
{
$arr[$i] = trim($arr[$i]);
$line = explode("\t", $arr[$i]);
$sql[] = "('{$line[0]}',
'{$line[1]}',
'{$line[2]}',
'{$line[3]}',
'{$line[4]}',
'{$line[5]}',
'{$line[6]}',
'{$line[7]}'
)";
$line[3]= $line[3]-($line[3]*0.05);
echo "<pre>";
print_r($sql);
echo "</pre>";
$result=mysql_query("SELECT * FROM `trika_towar` WHERE code= `$line[0]`");
echo $result;
if ($result=='true')
{
$status= 1 ;
$query1=("UPDATE `trika_towar` SET price=`$line[3]`,p1004=`$line[3]`, status =`$status` WHERE code= `$line[1]`");
mysql_query($query1);
}
else
{
$query = (" INSERT INTO`trika_towar`(`code`, `name`,`price`, `fas`, `doza`, `made`, `made_country`) VALUES ($line[1],$line[2],$line[3],$line[4],$line[5],$line[6],$line[7]");
mysql_query($query);
}
}
if(!mysql_query($query)) exit("Запрос не выполнился по тому, что ".mysql_error());
?>
|
Теперь он почему-то выполняется в таком цикле:
;
Array
(
[0] => ('0.',
'110009242',
'01-К Костыли подмышечные дерев. (под рост 140-170см), СИМС-2',
'557',
'1',
'1',
'Valentine International',
'Тайвань'
)
)
Array
(
[0] => ('0.',
'110009242',
'01-К Костыли подмышечные дерев. (под рост 140-170см), СИМС-2',
'557',
'1',
'1',
'Valentine International',
'Тайвань'
)
[1] => ('229.',
'110008076',
'10019/GR Резиновая насадка д/тростей (серая) 25мм , СИМС-2',
'36',
'1',
'1',
'Valentine International',
'Тайвань'
)
)
Array
(
[0] => ('0.',
'110009242',
'01-К Костыли подмышечные дерев. (под рост 140-170см), СИМС-2',
'557',
'1',
'1',
'Valentine International',
'Тайвань'
)
[1] => ('229.',
'110008076',
'10019/GR Резиновая насадка д/тростей (серая) 25мм , СИМС-2',
'36',
'1',
'1',
'Valentine International',
'Тайвань'
)
[2] => ('230.',
'40000580',
'10021 Костыли подмышечные (под рост 140-160см), СИМС-2',
'970',
'1',
'1',
'Valentine International',
'Тайвань'
)
)
Array
(
[0] => ('0.',
'110009242',
'01-К Костыли подмышечные дерев. (под рост 140-170см), СИМС-2',
'557',
'1',
'1',
'Valentine International',
'Тайвань'
)
[1] => ('229.',
'110008076',
'10019/GR Резиновая насадка д/тростей (серая) 25мм , СИМС-2',
'36',
'1',
'1',
'Valentine International',
'Тайвань'
)
[2] => ('230.',
'40000580',
'10021 Костыли подмышечные (под рост 140-160см), СИМС-2',
'970',
'1',
'1',
'Valentine International',
'Тайвань'
)
[3] => ('231.',
'20001310',
'10022 Костыли подмышечные (под рост 160-180см), СИМС-2',
'961',
'1',
'1',
'Valentine International',
'Тайвань'
)
А потом вообще останавливается. Почему? Зараннее спасибо! | |
|
|
|
|
|
|
|
для: maxim14
(05.04.2011 в 20:36)
| | Это не совсем корректно, mysql_query() не возвращает логическое true, она возвращает дескриптор запроса, по которому можно получить результат. В вашем случае разумнее просто получить количество найденных строк, например так (следует обратить внимание, что обратные кавычки применяются только для имен столбцов и таблиц, к данным следует применять одиночные кавычки)
<?php
...
// MySQL-функция COUNT() возвращает количество строк
$query = "SELECT COUNT(*) FROM `trika_towar` WHERE code= '$line[0]'";
$result = mysql_query($query);
if(!$result) exit("Ошибка - ".mysql_error());
if (mysql_result($result, 0))
{
// Соответствие найдено
}
else
{
// Соответствие не найдено
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(05.04.2011 в 20:57)
| | Переделал скрипт вот так:
<?
$arr = file("Полная база Трики1.txt");
$sql = array();
for($i = 0; $i < count($arr); $i++)
{
$arr[$i] = trim($arr[$i]);
$line = explode("\t", $arr[$i]);
$sql[] = "('{$line[0]}',
'{$line[1]}',
'{$line[2]}',
'{$line[3]}',
'{$line[4]}',
'{$line[5]}',
'{$line[6]}',
'{$line[7]}'
)";
if ($line[3]>=1)
{
$line[3]=$line[3]-$line[3]*0.05
;
echo "<pre>";
print_r($line[3]);
echo "</pre>";
$query = "SELECT COUNT(*) FROM `trika_towar` WHERE code= '$line[1]'";
$result = mysql_query($query);
if(!$result) exit("Ошибка - ".mysql_error());
if (mysql_result($result, 0))
{
$query1=("UPDATE `trika_towar` SET price='$line[3]',p1004='$line[3]', status ='$status' WHERE code= '$line[1]'");
mysql_query($query1); // Соответствие найдено
}
else
{
$query = (" INSERT INTO`trika_towar`(`code`, `name`,`price`, `fas`, `doza`, `made`, `made_country`) VALUES ('$line[1]','$line[2]','$line[3]','$line[4]','$line[5]','$line[6]','$line[7]'");
mysql_query($query); // Соответствие не найдено
}
}
}
if(!mysql_query($query)) exit("Запрос не выполнился по тому, что ".mysql_error());
?>
|
Цены меняет отлично, а вот новые записи не добовляет | |
|
|
|
|
|
|
|
для: maxim14
(05.04.2011 в 22:35)
| | Поставьте проверку на INSERT - может какая-то ошибка возникает
<?php
...
if(!mysql_query($query)) exit("При вставке INSERT возникает ошибка - ".mysql_error());
...
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(05.04.2011 в 23:03)
| | Ошибка следующая:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Я понимаю, что это связано с кавычками, а найти где не могу, как их только не расставлял | |
|
|
|
|
|
|
|
для: maxim14
(06.04.2011 в 00:32)
| | У вас нет закрывающей скобки для выражения VALUE(). | |
|
|
|
|
|
|
|
для: cheops
(06.04.2011 в 01:00)
| | Вы просто волшебник! Книжки это конечно хорошо, а не подскажете как сами то учились? | |
|
|
|
|
|
|
|
для: maxim14
(06.04.2011 в 04:51)
| | Ну кое-что о том как было дело можно почитать тут. А вообще как увидел компьютеры понял, что мое, с тех пор каждый год стараюсь изучить 2-3 технологии или языка программирования (дома везде книги по программированию - на полках, на столах, на полу - не думаю, что даже половину из них прочитал). А учился как и все: и пол года писал первую программу из 500 строк на Фортране, и по 2 дня искал забытую точку с запятой в C++ классах, и по три раза принимался изучать регулярные выражения, пока не осилил и боялся многотабличные UPDATE и DELETE запросы выполнять... Все изучается примерно одинаково: сначала долго и мучительно, потом быстрее и быстрее, пока вы не выходите на уровень асса и просто выбираете из памяти нужный язык программирования для решения проблемы. | |
|
|
|
|