цикъл за ъпдеит на един ред с много полета

vasilev

Registered
здравейте ,
имам селектиран един ред . в него има 300 полета и в няколко от тях има определен запис да речем "test" . аз искам да ъпдейтна този запис с 1 .

това най вероятно се прави с цикъл но не знам подхода дали е правилен ;)

Код:
$test='test';
for ($j=0; $j<=30; $j++) {
	 if s1_j=='$test' { s1_j ='1'} else {s1_j=s1_j};
	 $update = mysql_query("update table set 1_j=s1_j where date='$date' and user='$clientname'");
	 }
 
По добре си сглоби заявката на части и така я изпрати, отколкото да пращаш 300 заявки.
PHP:
$query="UPDATE  `table` SET  ";
for ($j=0; $j<=30; $j++) { 
    if s1_j=='$test' { s1_j ='1'} else {s1_j=s1_j}; 
        if($j==30){
         $query. = "s1_j=s1_j  "; 
       }else{
         $query. = "s1_j=s1_j ,"; 
       }
    }
$query.="where date='$date' and user='$clientname'";

П.С. Не мисля, че да имаш 300 колони е добра идея.
 
направил съм на php матрица със столове в кино ..
и на всеки стол отговаря едно поле . столовете са от вида 1_1 , 1_2 .. 2_1...11_27 . и всичките са на един ред в базата :)
не се сетих за друг начин , защото когато се инсъртва се записва един ред в който има дата потребител филм и .. столовете .
 
Защо не направиш таблица със всяка зала и просто да записваш в нея редове с резервирани места и дати ?
 
няма ли да е пак един ред в крайна сметка .
всеки като запазва място , след това трябва да селектна от таблицата и да видим дали това място е заето . ако са няколко реда .. после как ще ги merge-на ?
пък и много редове мисля че ще станат аз затова .. така го реших :)
иначе сигурно има много начини .

това в крайна сметка стана :
PHP:
$cinemaevent = "SELECT * FROM `cinema_events` where film_id='$film_id' and date='$datefilm' and user='$user_name'";
     $resultcinema = mysql_query($cinemaevent);
     while($row = mysql_fetch_array($resultcinema)) {
		 $updateseats=mysql_query("UPDATE `cinema_events` SET  ";
for ($j=0; $j<=30; $j++) { 
    if $row['1_$j']=='$cinemaid' {$row['1_$j']='1'} else {}; 
    }
$updateseats.="where date='$datefilm' and user='$user_name' and film_id='$film_id'");

	 };

1_j всъщност са полетата от 1_1 до 1_21 .. от таблица cinema_events.

има някакъв проблем в ъпдейта .. не ми зарежда страницата .
 
Не пълниш както трябва заявката. Виж пак примера, който ти дадох. Това, което пропускаш е да зададеш полетата, които да промени :)
 
Хмм, аз без цикъл INSERT - твам на няколко полета на един път, трябва ли и INSERT да е в цикъл. Логично би било да е, но ми се получава и без цикъл. Някой ми ли ми обяснил, извинявам се, че не е по темата.
 
eddyy93 каза:
Хмм, аз без цикъл INSERT - твам на няколко полета на един път, трябва ли и INSERT да е в цикъл. Логично би било да е, но ми се получава и без цикъл. Някой ми ли ми обяснил, извинявам се, че не е по темата.
При INSERT няма как да не запишеш в поне 1 поле. INSERT ти записва цял ред. Ако сложиш INSERT в цикъл, то тогава ще запишеш много редове, но на цената на много заявки, които излишно натоварват сървъра. Идеята е да изградиш заявката с цикъл, за да запишеш в базата много редове с една, а не с много заявки :)
 
нали трябва първо да ги взема полетата :)
аз това мислих до сега .. не трябва ли да са в array защото то не е едно .
първо да ги fetch-на , да ги запиша в $s1_j примерно и след това да правя ъпдейта ?

защото по този начин
PHP:
$query="UPDATE  `table` SET  ";
for ($j=0; $j<=30; $j++) { 
    if s1_j=='$test' { s1_j ='1'} else {s1_j=s1_j}; 
        if($j==30){
         $query. = "s1_j=s1_j  "; 
       }else{
         $query. = "s1_j=s1_j ,"; 
       }
    }
$query.="where date='$date' and user='$clientname'";

какво се явява s1_j ?
стигнал съм до тук не знам дали е правилно но поне не дава грешка хаха :)

PHP:
	 $cinemaevent = "SELECT * FROM `cinema_events` where film_id='$film_id' and date='$datefilm' and user='$user_name'";
     $resultcinema = mysql_query($cinemaevent);
     while($row = mysql_fetch_array($resultcinema))
	  {
for ($j=0; $j<=250; $j++)
 { 
     if ($row['$j']=='$cinemaid'){ $updateseats.= " '".mysql_fetch_field($resultcinema, $j)."' ='1' ,";  } else {}; 
 }
	 };

въпроса е от тук нататък ъпдейта как да го направя ..
аз знам как ще стане но по дървен начин .. взимам всяко поле и след това го слагам в if , след което инсъртвам . въпроса е с цикъл как да стане по .. професионално :)
 
HerpaMoTeH каза:
eddyy93 каза:
Хмм, аз без цикъл INSERT - твам на няколко полета на един път, трябва ли и INSERT да е в цикъл. Логично би било да е, но ми се получава и без цикъл. Някой ми ли ми обяснил, извинявам се, че не е по темата.
При INSERT няма как да не запишеш в поне 1 поле. INSERT ти записва цял ред. Ако сложиш INSERT в цикъл, то тогава ще запишеш много редове, но на цената на много заявки, които излишно натоварват сървъра. Идеята е да изградиш заявката с цикъл, за да запишеш в базата много редове с една, а не с много заявки :)

Нещо не се разбрахме, ама няма нищо.
 
vasilev каза:
нали трябва първо да ги взема полетата :)
аз това мислих до сега .. не трябва ли да са в array защото то не е едно .
първо да ги fetch-на , да ги запиша в $s1_j примерно и след това да правя ъпдейта ?

защото по този начин
PHP:
$query="UPDATE  `table` SET  ";
for ($j=0; $j<=30; $j++) { 
    if s1_j=='$test' { s1_j ='1'} else {s1_j=s1_j}; 
        if($j==30){
         $query. = "s1_j=s1_j  "; 
       }else{
         $query. = "s1_j=s1_j ,"; 
       }
    }
$query.="where date='$date' and user='$clientname'";

какво се явява s1_j ?
стигнал съм до тук не знам дали е правилно но поне не дава грешка хаха :)

PHP:
	 $cinemaevent = "SELECT * FROM `cinema_events` where film_id='$film_id' and date='$datefilm' and user='$user_name'";
     $resultcinema = mysql_query($cinemaevent);
     while($row = mysql_fetch_array($resultcinema))
	  {
for ($j=0; $j<=250; $j++)
 { 
     if ($row['$j']=='$cinemaid'){ $updateseats.= " '".mysql_fetch_field($resultcinema, $j)."' ='1' ,";  } else {}; 
 }
	 };

въпроса е от тук нататък ъпдейта как да го направя ..
аз знам как ще стане но по дървен начин .. взимам всяко поле и след това го слагам в if , след което инсъртвам . въпроса е с цикъл как да стане по .. професионално :)
Мисля, че s1_j се пада мястото, понеже така го беше в първия си пост :) Иначе за по професионално не знам каква е структурата ти на въвеждане на местата :)
 
направих го по дървения начин карай :)

структурата е един ред с 270 полета . 1_1 , 1_2 , 1_3 ...
във всяко поле записвам стойност - email на клиент . когато искам да ги одобра сменям този e-mail със 1 . така съм направил - if Полето е 1 то мястото е заето .. и така нататък
и затова исках със цикъл да обходи всички полета на този ред от базата и ако даденото поле е email то да го ъпдейтне с 1 .
 

Back
Горе