Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][sql] kopiowanie okreslonych pol z tabeli
Forum PHP.pl > Forum > PHP
Zbłąkany
Kontynuacja mego problemu: dwie tabele pierwsza w ms sql server 2000 druga w mySQL nazwy tabeli sa takie same, nazwy kolumn rowniez. Struktura tabeli:
Kod
Tabela: sl_grupatw

grt_id | grt_nazwa

Chcialbym zaktualizowac tabele mySQL na podstawie tej z ms sql server 2000 w taki sposob: jesli nie istnieje to ja utworzyc, nastepnie sprawdzic czy w tabeli mySQL sa bledne rekordy o grt_id nie zawarte w tabeli ms sql server 2000 i jesli sa to je usuwac (zrobione), nastepnie jesli jest za malo rekordow w tabeli mySQL niz w ms sql server 2000 to dodac odpowiednie rekordy tak by bylo ich tyle samo i mialy takie same wartosci (kolejnosc jest nieistotna, wartosci grt_id oraz grt_nazwa z ms sql server 2000 mam zapisane w 2 tablicach) i ostatni krok po tym wszytkim zwrocic jeszcze raz wszystkie rekordy z mySQL i porownac pola grt_nazwa z mySQL z tymi z ms sql server i jezeli sie roznia to je zaktualizowac komenda update. Nie wiem jakiej funkcji uzyc aby sie dowiedziec ktore grt_id z ms sql server 2000 nie sa zawarte w tabeli mySQL. Ponizej zamieszczam kod pliku ktory robi wszystko do kroku drugiego:
[php:1:e67a28a6a5]<?php
set_time_limit(0);
$hostms="localhost";
$hostmy="sklep";
$userms="sa";
$usermy="root";
$passms="";
$passmy="czarownik";
$tablems="sl_GrupaTw";
$tablemy="sl_grupatw";
$valuesms="grt_Id,grt_Nazwa";
$valuesmy="grt_id,grt_nazwa";

/* $connectmy=odbc_pconnect($hostmy, $usermy, $passmy);
$querymy="CREATE TABLE $tablemy (grt_Id INT NOT NULL, grt_Nazwa VARCHAR(30) NOT NULL)";
$execmy=odbc_exec($connectmy, $querymy); */

$connectms=odbc_pconnect($hostms, $userms, $passms);
$queryms1="SELECT COUNT(*) FROM $tablems";
$queryms2="SELECT $valuesms FROM $tablems";
$execms1=odbc_exec($connectms, $queryms1);
$execms2=odbc_exec($connectms, $queryms2);
$ms_licznik=odbc_result($execms1,1);
$i1="0";
while(odbc_fetch_row($execms2)){
$id[$i1]=odbc_result($execms2,1);
$nazwa[$i1]=odbc_result($execms2,2);
$i1++;
}
$wart_tab_id="'$id[0]'";
for($l1=1;$l1<$ms_licznik;$l1++){
$wart_tab_id.=", '$id[$l1]'";
}
$wart_tab_nazwa="'$nazwa[0]'";
for($l2=1;$l2<$ms_licznik;$l2++){
$wart_tab_nazwa.=", '$nazwa[$l2]'";
}
$wart_ms_id=array($wart_tab_id);
$wart_ms_nazwa=array($wart_tab_nazwa);
echo("$wart_tab_id<br>$wart_tab_nazwa<br>");

$connectmy=odbc_pconnect($hostmy, $usermy, $passmy);
$querymy1="SELECT COUNT(*) FROM $tablemy WHERE grt_id NOT BETWEEN '".$id[0]."' AND '".$ms_licznik."'";
$execmy1=odbc_exec($connectmy, $querymy1);
$my_licznik_zlw=odbc_result($execmy1,1);
$querymy2="SELECT COUNT(*) FROM $tablemy";
$execmy2=odbc_exec($connectmy, $querymy2);
$my_licznik=odbc_result($execmy2,1);
$reszta_licznika=$my_licznik-$my_licznik_zlw;

if($my_licznik_zlw>0){
$querymy3="SELECT grt_id FROM $tablemy WHERE grt_id NOT BETWEEN '".$id[0]."' AND '".$ms_licznik."'";
$execmy3=odbc_exec($connectmy, $querymy3);
while(odbc_fetch_row($execmy3)){
$my_grt_id_zle=odbc_result($execmy3,1);
echo("$my_grt_id_zle<br>");
$querymy4="DELETE FROM $tablemy WHERE grt_id='".$my_grt_id_zle."'";
odbc_exec($connectmy, $querymy4);}}

if($reszta_licznika<$ms_licznik){

}
?>[/php:1:e67a28a6a5]
Zbłąkany
Dobra doszedlem sam do tego tylko chcialbym sie zapytac czy jakos mozna to ewentualnie przyspieszyc (bo takich rekordow mogloby byc czasem kolo 1000 :wink: ) i czy dalem dobry warunek na sprawdzenie czy tabela istnieje?? Przedstawiam kod pliku ktory to wykonuje nie wprowadzalem dublowania gdyz struktura tabeli na to nie pozwala biggrin.gif
[php:1:fd5db5e7ad]<?php
set_time_limit(0);
$hostms="localhost";
$hostmy="sklep";
$userms="sa";
$usermy="root";
$passms="";
$passmy="czarownik";
$tablems="sl_GrupaTw";
$tablemy="sl_grupatw";
$valuesms="grt_Id,grt_Nazwa";
$valuesmy="grt_id,grt_nazwa";
$connectms=odbc_pconnect($hostms, $userms, $passms);
$connectmy=odbc_pconnect($hostmy, $usermy, $passmy);
$querymyt="SHOW INDEX FROM $tablemy FROM sklep_internetowy";
if(!@odbc_exec($connectmy, $querymyt)){
$querymy="CREATE TABLE $tablemy (grt_Id INT NOT NULL PRIMARY KEY, grt_Nazwa VARCHAR(30) NOT NULL)";
$execmy=odbc_exec($connectmy, $querymy);
echo("tabela $tablemy utworzona poprawnie<br>");
}
$queryms1="SELECT COUNT(*) FROM $tablems";
$queryms2="SELECT $valuesms FROM $tablems";
$execms1=odbc_exec($connectms, $queryms1);
$execms2=odbc_exec($connectms, $queryms2);
$ms_licznik=odbc_result($execms1,1);
$i1="0";
while(odbc_fetch_row($execms2)){
$ms_id[$i1]=odbc_result($execms2,1);
$ms_nazwa[$i1]=odbc_result($execms2,2);
$i1++;
}
$querymy1="SELECT COUNT(*) FROM $tablemy WHERE grt_Id NOT BETWEEN '".$ms_id[0]."' AND '".$ms_licznik."'";
$execmy1=odbc_exec($connectmy, $querymy1);
$my_licznik_zlw=odbc_result($execmy1,1);
$querymy2="SELECT COUNT(*) FROM $tablemy";
$execmy2=odbc_exec($connectmy, $querymy2);
$my_licznik=odbc_result($execmy2,1);
$reszta_licznika=$my_licznik-$my_licznik_zlw;
if($my_licznik_zlw>0){
$querymy3="SELECT grt_Id FROM $tablemy WHERE grt_Id NOT BETWEEN '".$ms_id[0]."' AND '".$ms_licznik."'";
$execmy3=odbc_exec($connectmy, $querymy3);
while(odbc_fetch_row($execmy3)){
$my_grt_id_zle=odbc_result($execmy3,1);
$querymy4="DELETE FROM $tablemy WHERE grt_Id='".$my_grt_id_zle."'";
odbc_exec($connectmy, $querymy4);
echo("zmazano wiersz o grt_id = $my_grt_id_zle<br>");
}
}
if($reszta_licznika<=$ms_licznik){
$f2="0";
for($f1=1;$f1<=$ms_licznik;$f1++){
$querymy="SELECT grt_Id FROM $tablemy WHERE grt_Id='$ms_id[$f2]' ";
$execmy=odbc_exec($connectmy, $querymy);
$my_id[$f1]=odbc_result($execmy,1);
if($my_id[$f1]==""){
$querymy="INSERT INTO $tablemy (grt_Id, grt_Nazwa) VALUES ('".$ms_id[$f2]."', '".$ms_nazwa[$f2]."')";
odbc_exec($connectmy, $querymy);
echo("dodano wiersz o grt_id = $ms_id[$f2]<br>");
}
$f2++;}}
$f3="0";
for($f4=1;$f4<=$ms_licznik;$f4++){
$querymy3="SELECT grt_Nazwa FROM $tablemy WHERE grt_Id='$ms_id[$f3]' ";
$execmy3=odbc_exec($connectmy, $querymy3);
$my_nazwa[$f4]=odbc_result($execmy3,1);
if($my_nazwa[$f4]!==$ms_nazwa[$f3]){
echo("$my_nazwa[$f4] jest rozne od $ms_nazwa[$f3] | $f4<br>");
$querymy1="DELETE FROM $tablemy WHERE grt_Id='$ms_id[$f3]' AND grt_Nazwa='".$my_nazwa[$f4]."'";
$querymy2="INSERT INTO $tablemy (grt_Id, grt_Nazwa) VALUES ('".$ms_id[$f3]."', '".$ms_nazwa[$f3]."')";
odbc_exec($connectmy, $querymy1);
odbc_exec($connectmy, $querymy2);
echo("zmieniono wiersz: grt_id = $ms_id[$f3] i grt_nazwa = $my_nazwa[$f4], na: grt_id = $ms_id[$f3] i grt_nazwa = $ms_nazwa[$f3] | $f4<br>");
}else{
echo("$ms_id[$f3] - $my_nazwa[$f4] | $f4<br>");
}
$f3++;
}
?>[/php:1:fd5db5e7ad]
P.S. Przepraszam ze w nowym poscie ale tak jakos wyszlo smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.