|
|
|
| По крону раз в сутки в таблицу базы нужно записать 4 строки.
Значения берутся из массива $a.
$a = array(1=>array(a=>x,b=>x,c=>x),
2=> array(a=>x,b=>x,c=>x),
3=>array(a=>x,b=>x,c=>x),
4=>array(a=>x,b=>x,c=>x))
x - разные значения, которые и пишутся в базу.
На следующий день скрипт должен обновить все строки. То есть опять в первой строке в поле а записать значение - $a[$i]['a'], в поле b - значение $a[$i]['b'], во второй строке - аналогично и т.д.
Код у меня сейчас такой:
<?php
$a = array();
if($a){
$n = count($a);
for ($i=0; $i<$n; $i++){
$sql = "SELECT * FROM table";
$res = mysql_query($sql);
if(!$res) exit(mysql_error());
$num = mysql_num_rows($res);
if($num<=0){
$ai = $a[$i]['a'];
$bi = $a[$i]['b'];
$ci = $a[$i]['c'];
$ins = "INSERT INTO table(a,b,c) VALUES('$ai', '$bi', '$ci')";
$res1 = mysql_query($ins);
if(!$res1) exit(mysql_error());
}else{
$upd = "UPDATE table SET a = $a[$i]['a'],b = $a[$i]['b'], c = $a[$i]['b']";
$res2 = mysql_query($upd);
if(!$res2) exit(mysql_error());
}
}
}
?>
|
В базу пишется одна строка - последняя, получается обновляется все время одна строка. Как поставить условие, чтобы счетчик отсчитывал 4 строки и только потом выполнял обновление? | |
|
|
|
|
|
|
|
для: Лена
(09.09.2009 в 22:29)
| | нужно, чтобы у каждой строки был свой ключ. | |
|
|
|
|
|
|
|
для: Trianon
(09.09.2009 в 22:51)
| | Не поняла. У меня и так к каждой строке идет свой id
У первой id = 1, второй id = 2 и т.д. | |
|
|
|
|
|
|
|
для: Лена
(09.09.2009 в 23:21)
| | тогда
1) где в операторах SELECT и UPDATE указания WHERE id = $i ?
2) по большому счету, задача решается одним запросом INSERT INTO ... ON DUPLICATE KEY UPDATE | |
|
|
|
|
|
|
|
для: Trianon
(09.09.2009 в 23:35)
| | Сделала через INSERT INTO ... ON DUPLICATE KEY UPDATE. Спасибо.
$sql = "INSERT INTO table (id, w_d,w_m)
VALUES ('$i','$d','$m',) ON DUPLICATE
KEY UPDATE w_d = " . $d . ", w_m = " . $m;
|
| |
|
|
|
|
|
|
|
для: Лена
(10.09.2009 в 14:11)
| | Вы явно недочитали мануал.
UPDATE w_d = VALUES(w_d), w_m = VALUES(w_d);
позволяет затолкать все четыре строки одним запросом. | |
|
|
|
|
|
|
|
для: Trianon
(10.09.2009 в 14:23)
| | :) Как раз и не дочитала до строчки
The ON DUPLICATE KEY UPDATE clause can contain multiple column assignments, separated by commas.
Но мой же вариант тоже сработал... | |
|
|
|
|
|
|
|
для: Лена
(10.09.2009 в 15:02)
| | >Но мой же вариант тоже сработал...
Но запрос оказался в цикле.
Вся прелесть ON DUPLICATE KEY UPDATE именно в обработке многострочных наборов данных.
К примеру: http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=61006 | |
|
|
|
|
|
|
|
для: Trianon
(10.09.2009 в 15:04)
| | Почитала. Спасибо. | |
|
|
|
|
|
|
|
для: Лена
(09.09.2009 в 22:29)
| |
<?php
$a = array(
1=>array(a=>x,b=>x,c=>x),
2=> array(a=>x,b=>x,c=>x),
3=>array(a=>x,b=>x,c=>x),
4=>array(a=>x,b=>x,c=>x)); # здесь нет $a[0]
# а в for $i=0........
if($a){
$n = count($a);
for ($i=0; $i<$n; $i++){
$sql = "SELECT * FROM table";
// зачем выбирать три раз одно и то-же ?
// тем более что $res здесь нигде не используется
$res = mysql_query($sql);
if(!$res) exit(mysql_error());
$num = mysql_num_rows($res);
if($num<=0){
////// здесь условие $num<=0 , ?))
$ai = $a[$i]['a'];
$bi = $a[$i]['b'];
$ci = $a[$i]['c'];
$ins = "INSERT INTO table(a,b,c)
VALUES('$ai', '$bi', '$ci')";
$res1 = mysql_query($ins);
// дальше ещё сильно не приглядывался )
|
| |
|
|
|