Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Przenoszenie danych z bazy MSSQL do MYSQL.
gawcio90
post 19.11.2014, 16:15:05
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 27.03.2013

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
sazian
post 19.11.2014, 19:29:05
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


1)wywalić +48 z początku
2)wywalić wszystkie nie cyfry
Go to the top of the page
+Quote Post
gawcio90
post 19.11.2014, 21:35:20
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 27.03.2013

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
sazian
post 19.11.2014, 23:16:25
Post #4





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


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;
Go to the top of the page
+Quote Post
gawcio90
post 20.11.2014, 10:28:05
Post #5





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 27.03.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Pyton_000
post 20.11.2014, 11:02:44
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


ustawiasz trigger na on insert dla tabeli docelowej
Go to the top of the page
+Quote Post
gawcio90
post 20.11.2014, 15:21:08
Post #7





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 27.03.2013

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
kartin
post 20.11.2014, 20:10:37
Post #8





Grupa: Zarejestrowani
Postów: 246
Pomógł: 79
Dołączył: 25.05.2010

Ostrzeżenie: (0%)
-----


Masz bazę o nazwie baza2 a w niej tabelę cs__Customer na tym samym serwerze MySQL co baza o nazwie baza?


--------------------
Jeśli ten post pomógł to kliknij przycisk po lewej stronie.
Nie pomagam przez PW, GG, e-mail, faks, telegram, znaki dymne, ...
Go to the top of the page
+Quote Post
Pyton_000
post 21.11.2014, 10:27:00
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
gawcio90
post 21.11.2014, 15:45:10
Post #10





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 27.03.2013

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.04.2025 - 08:19