witam
Czy jeśli robię update dla 1 użytkownika warto/trzeba budować tak zapytanie aby update był w 1 zapytaniu a nie w kilku ?
napisałem prosty kod którego zadaniem jest zbudowanie zapytania UPDATE z LEFT JOINem dla kilku tabel
$id = 1;
$ustawienia_baza_tabela = array('tabela','tabela1','tabela2');
$ustawienia_baza_pole['win1'] = 1;
$ustawienia_baza_pole['win2'] = 2;
$ustawienia_baza_pole['win3'] = 3;
$ustawienia_baza_pole_laczace = 'id_laczace';
$literki = range('a','z');
$zapytanie = 'UPDATE '.$ustawienia_baza_tabela[0].' a ';
$suma_tabel = count($ustawienia_baza_tabela);
$l = 1;
foreach ($ustawienia_baza_tabela as $aa => $war)
{
$zapytanie .= 'LEFT JOIN `'.$war.'` '.$literki[$l].' ON a.`'.$ustawienia_baza_pole_laczace.'` = '.$literki[$l].'.`'.$ustawienia_baza_pole_laczace.'` ';
++$l;
}
$m = 0;
foreach($ustawienia_baza_pole as $pole_nazwa => $pole_wartosc)
{
{
++$m;
}
}
$zapytanie .= ' SET ' . implode(', ', $tab) . ' WHERE `'.$ustawienia_baza_pole_laczace.'` = ' . intval($id);
prosił bym o naprowadzenie mnie jak wydajniej to zrobić
skrypt ma kilka problemów:
1) jeżeli nazwa klucza => $ustawienia_baza_pole['win1'] czyli pola są identyczne budowany jest tylko update na 1 pole.
2) na tą chwile skrypt "działa poprawnie" w przypadku gdy dla tabeli1 występuje 1 pole ..
prosił bym o naprowadzenie mnie jak to poprawić i czy to ma sens bo może jest jakaś inna metoda stworzenia tego strukturalnie z góry dziękuje
siedziałem trochę i napisałem coś takiego:
$id = 1;
'tabela' =>array('pole1' => 1,'pole2' => 2,'pole3' =>3,'pole4' =>4,'pole5'=>5),
'tabela2' =>array('pole6' => 1,'pole7' => 2,'pole3' =>3,'pole8' =>24,'pole9'=>53),
'tabela3' =>array('pole10' => 13,'pole11' => 22,'pole3' =>33,'pole135' =>43,'pole13'=>53),
);
$literki = range('a','z');
$suma_kluczy = count($klucze_glowne)-2;
$query = 'UPDATE ';
for($a=0;$a<=$suma_kluczy;++$a)
{
$query .= ' `'.$klucze_glowne[$a].'` '.$literki[$a].' LEFT JOIN `'.$klucze_glowne[$a+1].'` '.$literki[$a+1].' ON '.$literki[0].'.`id_char` = '.$literki[$a+1].'.`id_char`';
if($a != $suma_kluczy){$query .= ' LEFT JOIN';}
}
$query .= ' SET ';
$b = 0;
foreach ($tablica_baza as $klucz => $wartosc)
{
foreach($wartosc as $klucz2 => $wartosc2)
{
echo $klucz2.' =>'.$wartosc2.'<bR>'; $query .= $literki[$b].'.`'.$klucz2.'` = '.$literki[$b].'.`'.$klucz2.'` + '.$wartosc2.', ';
}
//print_r($wartosc);
++$b;
}
$query .= " WHERE `id` = '".intval($id)."'";
jednak dalej nie wiem czy powinno się tak robić...
oczywiście mam jeszcze 2 problemy
1) przed warunkiem WHERE wyświetla "," więc będzie error (jutro do tego przysiądę)
2) drugim problemem jest zła składnia w pętli for (do tego też jutro usiądę)
Prosił bym o poradę ...