[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: UPDATE в таблицу массива
sjy19
Привет всем! wink.gif
У меня есть массив с числами float(9,2).
Мне нужно сделать UPDATE в таблицу этого массива с таким условием WHERE,
чтоб каждое значение массива, начиная с первого, вставало в строку таблицы,
где id=1, и так далее по возрастанию на +1, пока элементы массива не кончатся.
Жду помощи и дельных советов!



Спустя 25 минут, 58 секунд (29.03.2012 - 07:49) Игорь_Vasinsky написал(а):
структура таблицы нужна

Спустя 5 минут, 27 секунд (29.03.2012 - 07:54) sjy19 написал(а):
Вот аткая структура, Игорь_Vasinsky:
id int(11) Нет auto_increment
nom int(11) Да NULL
sum float(9,2) Да NULL
data date Да NULL
tek_sum float(9,2)

Спустя 12 минут, 40 секунд (29.03.2012 - 08:07) Игорь_Vasinsky написал(а):
$arr_float - массив с float значениями

$sum_float = array_sum($arr_float);


UPDATE `table` SET `sum` = '".$sum_float."' WHERE `id` = 1


как то так

Спустя 43 минуты, 39 секунд (29.03.2012 - 08:51) sjy19 написал(а):
Вот смотрите.
У меня массив, который при echo выдает на экране:
250000-1199853599.1 (числа 250000 -11998 53599.1)
Нужно, чтобы эти значения встали в таблицу по порядку в строки, начиная с id=1.
Не могу сообразить, как это сделать..

Спустя 3 минуты, 27 секунд (29.03.2012 - 08:54) Игорь_Vasinsky написал(а):
ни чё не понял.
вы мне дали структуру, где есть sum - я так понял сумма всех чисел массива

теперь говорите про вставку в строку всех чисел

Спустя 7 минут, 17 секунд (29.03.2012 - 09:01) sjy19 написал(а):
так этот массив и есть массив, где значения - суммы

Спустя 30 секунд (29.03.2012 - 09:02) sjy19 написал(а):
суммы то я получила, а вот как сделать update этого массива, никак не получается

Спустя 6 минут, 12 секунд (29.03.2012 - 09:08) Игорь_Vasinsky написал(а):
так блин апдейт массива или БД??? смотри может

INSERT

http://www.w3schools.com/php/php_mysql_insert.asp

Спустя 1 минута, 7 секунд (29.03.2012 - 09:09) sjy19 написал(а):
сделать апдейт БД а значения берутся из массива.

Спустя 8 минут, 10 секунд (29.03.2012 - 09:17) Игорь_Vasinsky написал(а):
Ключи массива соответствуют id строки?
строки уже есть в БД?

sum float(9,2) Да NULL - что это?

tek_sum float(9,2) - что это

какое поле обновлять?

Спустя 10 минут, 21 секунда (29.03.2012 - 09:28) sjy19 написал(а):
я наверное вас уже замучала своим объяснением ))) извините...
Ключи массива соответствуют id строки - да.
обновляем поле tek_sum, но в принципе не вижу разницы, они же все с одинаковым типом данных....

Спустя 8 минут, 11 секунд (29.03.2012 - 09:36) Игорь_Vasinsky написал(а):
Цитата
$all_floats  - массив с твоими числами


Запрос при условии что в БД есть строки с id = ключам массив

foreach($all_floats as $key=>$value)
mysql_query("UPDATE `твоя таблица` SET `tek_sum` = '".$value."' WHERE `id` = ".$key.") or die(mysql_error());


Запросы в БД не хорошо слать, можно на mysqli состряпать запрос один для всех чисел и одним запросом в БД.

Спустя 1 час, 13 минут, 55 секунд (29.03.2012 - 10:50) sjy19 написал(а):
В таком виде?
ничего не получается...
foreach($summa as $key=>$value)


$izmen = "UPDATE tam_pl SET tek_sum= '".$value."' WHERE id = '".$key."'";
if(mysql_query($izmen))
{
echo "Запись изменена!";
}
else
{
echo "нет!";
}

Спустя 24 минуты, 29 секунд (29.03.2012 - 11:14) Placido написал(а):
Цитата (sjy19 @ 29.03.2012 - 09:50)
В таком виде?
ничего не получается...

Ошибка какая возникает?
А вообще, в таком виде у вас всегда будет выводиться сообщение "Запись изменена!", потому что mysql_query() возвращает true, даже если запись не обновлена. False вернется только при ошибке в запросе. Нужно переписать так:
foreach($summa as $key=>$value)
{
$izmen = "UPDATE tam_pl SET tek_sum= '".$value."' WHERE id = '".$key."'";
mysql_query($izmen) or die(mysql_error());

if(mysql_affected_rows() >= 1)
{
echo "Запись изменена!";
}
else
{
echo "нет!";
}
}

Спустя 8 минут, 55 секунд (29.03.2012 - 11:23) sjy19 написал(а):
Ошибок не пишет. и с вашим последним кодом не выдает ни одного echo. .. и заполнение tek_sum соответственно , не происходит...

Спустя 6 минут, 19 секунд (29.03.2012 - 11:30) Placido написал(а):
Включите вывод ошибок. И посмотрите, какая ошибка возникает. Возможно $summa - не массив, и ваш foreach просто не срабатывает.
error_reporting(E_ALL);

Спустя 11 минут, 46 секунд (29.03.2012 - 11:41) Игорь_Vasinsky написал(а):
id = '".$key."'

уберите апострофы, у вас там INT

Спустя 9 минут, 25 секунд (29.03.2012 - 11:51) Placido написал(а):
Цитата (Игорь_Vasinsky @ 29.03.2012 - 10:41)
id = '".$key."'

уберите апострофы, у вас там INT

Это в данном случае не принципиально. Будет работать и с апострофами, а вот наоборот (текстовое поле без кавычек) - нет.

Спустя 2 минуты, 4 секунды (29.03.2012 - 11:53) sjy19 написал(а):
Warning: Invalid argument supplied for foreach() - такая ошибка

Спустя 1 минута, 22 секунды (29.03.2012 - 11:54) Игорь_Vasinsky написал(а):
biggrin.gif циклы работают с массивами. что у вас там за массив с суммами?

Спустя 1 час, 4 минуты, 44 секунды (29.03.2012 - 12:59) sjy19 написал(а):
вот код, где я получаю этот массив:
while($theme=mysql_fetch_array($results))
{

$nom1=$theme['nom'];
$sum1=$theme['sum'];
$data1=$theme['data'];

$pl1="select * from otchet where p_p1='$nom1'";
$avtor1= mysql_query ($pl1);
if($avtor1)
{
while($ras1= mysql_fetch_array($avtor1))
{
$tam11[]=$ras1['tam1'];


}
}


$pl2="select * from otchet where p_p2='$nom1'";
$avtor2= mysql_query ($pl2);
if($avtor2)
{
while($ras2= mysql_fetch_array($avtor2))
{
$tam22[]=$ras2['tam2'];
}
}


$pl3="select * from otchet where p_p3='$nom1'";
$avtor3= mysql_query ($pl3);
if($avtor3)
{
while($ras3= mysql_fetch_array($avtor3))
{
$tam33[]=$ras3['tam3'];
}
}

$pl4="select * from otchet where p_p4='$nom1'";
$avtor4= mysql_query ($pl4);
if($avtor4)
{
while($ras4= mysql_fetch_array($avtor4))
{
$tam44[]=$ras4['tam4'];
}
}

$tamm1=array_sum($tam11);
$tamm2=array_sum($tam22);
$tamm3=array_sum($tam33);
$tamm4=array_sum($tam44);

$summa=$sum1-($tamm1+$tamm2+$tamm3+$tamm4);

Спустя 25 минут, 3 секунды (29.03.2012 - 13:24) Renden написал(а):
sjy19
О боже, для начала оформляйте свой код хотяб в теги php..
Я думаю вам надо сначала разобраться с тем как ваш "массив" генерится, ибо герерируете вы его как-то через жопу) Я бы пересмотрел на вашем месте структуру в таблице базы данных, да и вообще все можно сделать 1 запросом, а далее разобрать:

$query = mysql_query("SELECT * FROM `otchet` WHERE p_p1='$nom1' OR p_p2='$nom1' OR p_p3='$nom1' OR p_p4='$nom1'");
while($row = mysql_fetch_assoc($query))
{
if($row['p_p1'] == $nom1)
$tam11[]=$ras1['tam1'];
if($row['p_p2'] == $nom1)
$tam22[]=$ras2['tam2'];
//..и тд..
}

Но запрос тоже кривой, поскольку у вас не правильная архитектура в таблице.
Быстрый ответ:

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