Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][MySQL][PHP]Aktualizacja stanów magazynowych w aplikacji
Forum PHP.pl > Forum > Przedszkole
nikos
Witam!
W jakiś sposób najlepiej będzie aktualizować bazę danych produktów z programu Subiekt GT który ma bazę MS SQL do aplikacji która wykorzystuje MySQL.

W aplikacji jest tylko część produktów (ok 2800) mają one dodaną komórkę w tabeli subject_id gdzie znajduję się id produktu z bazy Subiekt.

Aplikacja nie przechowuje stanów magazynowych produktów posiada tylko włącznik i wyłącznik produktu (1,0)

W jaki sposób najlepiej zaplanować cały proces aktualizacji stanów magazynowych?

Wyłączenie produktu np gdy jego ilość jest < 2

Stany codziennie się zmieniają.

Czy np najpierw wypadałoby znać całą listę produktów z bazy danych aplikacji potem zapytać o ich stany i gdy są <2 wyłączyć je?
Tomplus
U mnie osoba która zajmuje się Subiektem od strony handlowej stworzyła program do aktualizacji stanów na poziomie serwera.
Program w trybie live zbiera informacje o każdej zmianie stanu magazynowego oraz cenie i wysyła do bazy MySQL.
Pyton_000
Można by zerknąć w bazę subiekta czy nie ma tam daty aktualizowanego przedmiotu, jeśli jest to robić update z delty czyli tylko tych które zmieniły się od ost. aktualizacji.

Ale fakt że większość rozwiązań integracji które widziałem to aplikacja w np. c# działająca po stronie subiekta i pchająca dane do serwera Web.
xaitras
Ja sobie napisałem taki skrypt do aktualizacji stanów magazynowych w sklepie:

  1.  
  2. header('Content-Type: text/html; charset=utf-8');
  3. ini_set( 'display_errors', 'On' );
  4. error_reporting( E_ALL );
  5. $serverName = "localhost\INSERTGT";
  6. $connectionInfo = array( "Database"=>"nazwa bazy danych sql", "UID"=>"login do serwera sql", "PWD"=>"hasło", "CharacterSet" => "UTF-8");
  7. $conn = sqlsrv_connect( $serverName, $connectionInfo);
  8. if( $conn ) {
  9. echo "Połączony z Subiektem - wszystko ok!<br />";
  10. }else{
  11. echo "Nie mogę się połączyć z Subiektem!<br />";
  12. die( print_r( sqlsrv_errors(), true));
  13. }
  14. $sql = "SELECT tw_symbol as Symbol, tw_nazwa as Nazwa, st_Stan as Stan FROM tw__towar INNER JOIN tw_Stan ON tw_Id=st_TowId WHERE st_MagId=1";
  15. $stmt = sqlsrv_query( $conn, $sql );
  16.  
  17. if( $stmt === false) {
  18. die( print_r( sqlsrv_errors(), true) );
  19. }
  20. $adres_ip_serwera_mysql_z_baza_danych = '';
  21. $nazwa_bazy_danych = '';
  22. $login_bazy_danych = '';
  23. $haslo_bazy_danych = '';
  24.  
  25. if ( !mysql_connect($adres_ip_serwera_mysql_z_baza_danych,
  26.  
  27. $login_bazy_danych,$haslo_bazy_danych) ) {
  28. echo 'Nie moge polaczyc sie z baza danych';
  29. exit (0);
  30. }
  31.  
  32. if ( !mysql_select_db($nazwa_bazy_danych) ) {
  33. echo 'Blad otwarcia bazy danych';
  34. exit (0);
  35. }
  36.  
  37. while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
  38. $symbol = $row['Symbol'];
  39. $stan = round($row['Stan'], 0);
  40. $zapytanie = "UPDATE products SET products_model = '$symbol', products_quantity = '$stan' WHERE products_model = '$symbol' "
  41. $wynik = mysql_query($zapytanie);
  42. }
  43. if ($wynik) {
  44. echo 'Zaktualizowałem stany magazynowe!';
  45. }
  46. sqlsrv_free_stmt($stmt);


Może ci się przyda wink.gif
nikos
Dzięki za informacje.
Wow skrypt super.

Okazuje się że mam też dostęp do bazy MySQL w której te stany się aktualizują za pomocą zewnętrznego programu.
Czyli tak na prawdę mój problem zawęża się do aktualizacji produktów które maja ten sam indeks.

W jednej bazie jest 7000tyś obiektów w drugiej tylko 2600
Czy zrobić to za pomocą csv ?

Chodzi o to że w drugiej nie ma ilości jest tylko włącz wyłącz.


xaitras Wykorzystałem Twój pomysł stworzyłem skrypt który między dwoma bazami MySQL aktualizuje stany magazynowe. Czy mogę prosić o sprawdzenie czy może da się takowy skrypt usprawnić ponieważ jego wykonanie zajmuje dużo czasu ponad 300s i to w pierwszej części.
  1.  
  2. <?php
  3. header('Content-Type: text/html; charset=utf-8');
  4. ini_set( 'display_errors', 'On' );
  5. error_reporting( E_ALL );
  6. // serwer 1
  7. $servername1 = "localhost";
  8. $username1 = "root";
  9. $password1 = "";
  10. $dbname1 = "sklep";
  11. //serwer 2
  12. $servername2 = "localhost";
  13. $username2 = "root";
  14. $password2 = "";
  15. $dbname2 = "test";
  16.  
  17. $connect1 = mysqli_connect($servername1, $username1, $password1, $dbname1);
  18. $connect2 = mysqli_connect($servername2, $username2, $password2, $dbname2);
  19.  
  20.  
  21. $query1 = "SELECT * FROM `sklep_towary` WHERE STAN < 3";
  22. $query2 = "SELECT * FROM `sklep_towary` WHERE STAN > 2";
  23.  
  24.  
  25. $result1 = mysqli_query($connect1, $query1);
  26. $result2 = mysqli_query($connect1, $query2);
  27.  
  28. IF(mysqli_num_rows($result1) > 0){
  29. while($row = mysqli_fetch_assoc($result1))
  30. { $indeks = $row['INDEKS'];
  31. $stan = $row['STAN'];
  32. $zapytanie = "UPDATE dimensions_available_phones SET avaiblable = 0 WHERE subiekt_id ='$indeks' " OR die(mysql_error());
  33. $wynik = mysqli_query($connect2, $zapytanie);
  34.  
  35. }
  36. IF(mysqli_num_rows($result2)>0){
  37. while($row = mysqli_fetch_assoc($result2)){
  38. $indeks = $row['INDEKS'];
  39. $stan = $row['STAN'];
  40. $zapytanie2 = "UPDATE dimensions_available_phones SET avaiblable = 1 WHERE subiekt_id ='$indeks' " OR die(mysql_error());
  41. $wynik2 = mysqli_query($connect2, $zapytanie2);
  42. }
  43.  
  44. }
  45. IF($wynik){
  46. echo 'Wyłączono';
  47. }
  48. IF($wynik2){
  49. echo 'Włączono';
  50. }
  51. }
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. ?>
  59.  
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.