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

Форум MySQL

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

 

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

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

тема: записать массив в базу
 
 автор: Лена   (09.09.2009 в 22:29)   письмо автору
 
 

По крону раз в сутки в таблицу базы нужно записать 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 строки и только потом выполнял обновление?

  Ответить  
 
 автор: Trianon   (09.09.2009 в 22:51)   письмо автору
 
   для: Лена   (09.09.2009 в 22:29)
 

нужно, чтобы у каждой строки был свой ключ.

  Ответить  
 
 автор: Лена   (09.09.2009 в 23:21)   письмо автору
 
   для: Trianon   (09.09.2009 в 22:51)
 

Не поняла. У меня и так к каждой строке идет свой id
У первой id = 1, второй id = 2 и т.д.

  Ответить  
 
 автор: Trianon   (09.09.2009 в 23:35)   письмо автору
 
   для: Лена   (09.09.2009 в 23:21)
 

тогда
1) где в операторах SELECT и UPDATE указания WHERE id = $i ?
2) по большому счету, задача решается одним запросом INSERT INTO ... ON DUPLICATE KEY UPDATE

  Ответить  
 
 автор: Лена   (10.09.2009 в 14:11)   письмо автору
 
   для: 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;

  Ответить  
 
 автор: Trianon   (10.09.2009 в 14:23)   письмо автору
 
   для: Лена   (10.09.2009 в 14:11)
 

Вы явно недочитали мануал.
UPDATE w_d = VALUES(w_d), w_m = VALUES(w_d);
позволяет затолкать все четыре строки одним запросом.

  Ответить  
 
 автор: Лена   (10.09.2009 в 15:02)   письмо автору
 
   для: Trianon   (10.09.2009 в 14:23)
 

:) Как раз и не дочитала до строчки
The ON DUPLICATE KEY UPDATE clause can contain multiple column assignments, separated by commas.

Но мой же вариант тоже сработал...

  Ответить  
 
 автор: Trianon   (10.09.2009 в 15:04)   письмо автору
 
   для: Лена   (10.09.2009 в 15:02)
 

>Но мой же вариант тоже сработал...
Но запрос оказался в цикле.

Вся прелесть ON DUPLICATE KEY UPDATE именно в обработке многострочных наборов данных.
К примеру: http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=61006

  Ответить  
 
 автор: Лена   (10.09.2009 в 15:27)   письмо автору
 
   для: Trianon   (10.09.2009 в 15:04)
 

Почитала. Спасибо.

  Ответить  
 
 автор: heed   (09.09.2009 в 22:59)   письмо автору
 
   для: Лена   (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); 
// дальше ещё сильно не приглядывался )

  Ответить  
Rambler's Top100
вверх

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