Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przenoszenie danych z bazy MSSQL do MYSQL.
Forum PHP.pl > Forum > PHP
gawcio90
Witam,
Potrzebuję przenieść dwie kolumny danych z bazy MSSQL do bazy MYSQL
-Imię i Nazwisko
-numer telefonu

Numery telefonów w pierwszej bazie nie są znormalizowane, są w postaci różnej:
880 341 342
+48890232002
(880)232012

Chciałbym przenieść owe numery do nowej bazy ale już w postaci znormalizowanej czyli: "880411444"

Jak najprościej tego dokonać?

Pozdrawiam.
sazian
1)wywalić +48 z początku
2)wywalić wszystkie nie cyfry
gawcio90
Cytat
1)wywalić +48 z początku
2)wywalić wszystkie nie cyfry


Domyślam się, chodzi mi o więcej szczegółów, jak to ugryź w kodzie.
W którym momencie zastosować funkcje. Wyciągnę te dane z pierwszej bazy i jak dalej?
sazian
najbardziej logiczne wydaje się użycie wyzwalacza na inserta ale mysql nie obsługuje wyrażeń regularnych dla replace sad.gif więc widzę dwa wyjścia
1)zamiana wszystkiego w php
2)jednak wyzwalacz wink.gif w wyzwalaczu najpierw wywal wszystkie znaki space(na wypadek gdyby ktoś napisał + 48), następnie sprawdź czy nr. zaczyna się od +48 jeśli tak to dalsze przeszukiwanie będzie od czwartego znaku. Następnie robisz prostą pętle która przeszukuje wszystkie znaki i jeśli znak jest cyfrą do dodajesz ją do zmiennej pomocniczej.
coś w tym stylu(oczywiście pisane z palca i wymaga dopracowania)
  1. DECLARE temp VARCHAR(1000);
  2. DECLARE ch VARCHAR(1);
  3. DECLARE i INT;
  4. SET i = 1;
  5. SET temp = ''
  6. loop_label: LOOP
  7. IF i>CHAR_LENGTH(NEW.telefon) THEN
  8. LEAVE loop_label;
  9. END IF;
  10. SET ch = SUBSTRING(NEW.telefon,i,1);
  11. IF NOT ch REGEXP '[0-9]' THEN
  12. SET temp = CONCAT(temp,ch);
  13. END IF;
  14.  
  15. SET i=i+1;
  16. END LOOP;
  17. NEW.telefon=temp;
gawcio90
Czy mógłbyś podać jakiś przykład połączenia takiego wyzwalacza z zapytaniem kopiującym jak poniżej?
  1. INSERT INTO BAZA.TABELA (KOL1, KOL2, KOL3) SELECT KOL1,KOL2,KOL3 FROM INNA_BAZA.TABELA
Pyton_000
ustawiasz trigger na on insert dla tabeli docelowej
gawcio90
Witam,
próbuję póki co wykonać samo kopiowanie, ale już w tym momencie napotkałem problemy, poniżej zapytanie:
  1. mysql_query("INSERT INTO `baza`.`numbers` (cs_Name, cs_Nick, cp_Phone) SELECT (cs_Name, cs_Nick, cp_Phone) FROM `baza2`.`cs__Customer` JOIN cs_CustPhone on cs_Id = cp_CustomerId WHERE cs_Nick = 'xxxx'") or die(mysql_error());


Dostaję informację, że:
Kod
Table baza2.cs__Customer' doesn't exist


Macie pomysł dlaczego tak się dzieje?
kartin
Masz bazę o nazwie baza2 a w niej tabelę cs__Customer na tym samym serwerze MySQL co baza o nazwie baza?
Pyton_000
Przecież Ty próbujesz odwołać się z poziomy MySQL do bazy w... Mysql...
Nie zrobisz tego w ten sposób. Musisz albo zrobić eksport do pliku i import albo jakimś skryptem

W PHP robisz 2 połączenia:
- czytasz z MSSQL
- Wrzucasz do MySQL
gawcio90
Zrobiłem według waszych porad. Mam jednak problem z dwoma rzeczami:
1. Nazwiska wyświetlane na stronie podczas wykonania zawierają polskie znaki natomiast w bazie mysql zapisywane są w z pytajnikami. W bazie mysql ustawione mam:
-charset: utf8
-collation: utf8_polish_ci
Próbowałem również ustawiać utf8 podczas łączenia się z samą bazą jednak bezskutecznie.

2.Niektóre wyniki zwracane przez zapytanie są zdublowane, jak to odfiltrować na podstawie numeru? Aby po prostu nie zapisywał 2 takich samych rekordów kiedy mają taki sam numer telefonu?

Poniżej kod:
  1. $query="SELECT cs_Name, cs_Nick, cp_Phone FROM cs__Customer JOIN cs_CustPhone on cs_Id = cp_CustomerId JOIN tr__Transaction on tr_CustomerId = cs_Id WHERE (DAY(tr_CreationDate) = DAY(GETDATE()) AND MONTH(tr_CreationDate) = MONTH(GETDATE()) AND YEAR(tr_CreationDate) = YEAR(GETDATE()))";
  2.  
  3. // Open MySql connection
  4. $mydbconn=mysql_connect($mydbserver,$mydbuser,$mydbpass);
  5. mysql_select_db($mydbname, $mydbconn) or die("Unable to Open The MySql Database");
  6.  
  7. // Execute the MS-Sql stament and loop over the data
  8. $qt=mssql_query($query);
  9. while($nt=mssql_fetch_array($qt))
  10. {
  11. $new_tel = strReplaceAssoc($replace, $nt[cp_Phone]);
  12.  
  13. // DIsplay each row as we retrive it.
  14. echo "$nt[cs_Name], $nt[cs_Nick], $new_tel";
  15. echo "<br>";
  16.  
  17. $myquery = "INSERT INTO numbers(cs_Name, cs_Nick, cp_Phone) VALUES('".$nt[cs_Name]."', '".$nt[cs_Nick]."','".$new_tel."')";
  18. mysql_query($myquery) or Die("MySQL Query Failed " . mysql_error());
  19. }
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.