Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][MySQL][PHP] Optymalizacja i sprawdzenie skryptu, Dziwne wyniki po uruchomieniu skryptu
nikos
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 30.03.2009

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


Witam!
Mam skrypt, który aktualizuje dane z jednej bazy MySQL z drugą.

Po zrobieniu testu na zamianie 6 rekordów w jednej bazie są one zmieniane w drugiej. Ale:

Ogólna ilość dostępnych i niedostępnych produktów zmienia się o 8 zamiast o 6?

Ogólnie pobieram rekordy gdzie stan jest <3 i w drugiej bazie wyłączam je avaiblable = 0
A potem sprawdzam rekordy które są >2 i włączam za pomocą avaiblable = 1


  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3. ini_set( 'display_errors', 'On' );
  4. error_reporting( E_ALL );
  5. // serwer 1
  6. $servername1 = "localhost";
  7. $username1 = "root";
  8. $password1 = "";
  9. $dbname1 = "sklep";
  10. //serwer 2
  11. $servername2 = "localhost";
  12. $username2 = "root";
  13. $password2 = "";
  14. $dbname2 = "test";
  15.  
  16. $connect1 = mysqli_connect($servername1, $username1, $password1, $dbname1);
  17. $connect2 = mysqli_connect($servername2, $username2, $password2, $dbname2);
  18.  
  19.  
  20. $query1 = "SELECT * FROM `sklep_towary` WHERE STAN < 3";
  21. $query2 = "SELECT * FROM `sklep_towary` WHERE STAN > 2";
  22.  
  23.  
  24. $result1 = mysqli_query($connect1, $query1);
  25. $result2 = mysqli_query($connect1, $query2);
  26.  
  27. if(mysqli_num_rows($result1) > 0){
  28. while($row = mysqli_fetch_assoc($result1))
  29. { $indeks = $row['INDEKS'];
  30. $stan = $row['STAN'];
  31. $zapytanie = "UPDATE dimensions_available_phones SET avaiblable = 0 WHERE subiekt_id ='$indeks' " or die(mysql_error());
  32. $wynik = mysqli_query($connect2, $zapytanie);
  33.  
  34. }
  35. if($wynik){
  36. echo'Wyłączono';
  37. }
  38. }
  39. if(mysqli_num_rows($result2)>0){
  40. while($row = mysqli_fetch_assoc($result2)){
  41. $indeks = $row['INDEKS'];
  42. $stan = $row['STAN'];
  43. $zapytanie2 = "UPDATE dimensions_available_phones SET avaiblable = 1 WHERE subiekt_id ='$indeks' " or die(mysql_error());
  44. $wynik2 = mysqli_query($connect2, $zapytanie2);
  45. }
  46.  
  47. }
  48.  
  49. if($wynik2){
  50. echo 'Włączono';
  51. }
  52.  
  53.  
  54.  
  55. ?>


Dodam, że skrypt trochę długo się wykonuje i proszę o wskazówki jak można by było go zmodyfikować.
Oto test:
  1. UPDATE sklep_towary SET STAN = 5 WHERE INDEKS IN (12047,
  2. 08824,
  3. 08578,
  4. 13604,
  5. 15846,
  6. 17870)


i to daje
  1. SELECT * FROM `dimensions_available_phones` WHERE avaiblable = 0 1203
  2. SELECT * FROM `dimensions_available_phones` WHERE avaiblable = 1 1486

i dalej jak uruchomię na pierwszej bazie
  1. [SQL]
  2. UPDATE sklep_towary SET STAN = 0 WHERE INDEKS IN (12047,
  3. 08824,
  4. 08578,
  5. 13604,
  6. 15846,
  7. 17870)

[/SQL]

Dostaje
  1. SELECT * FROM `dimensions_available_phones` WHERE avaiblable = 0 1211
  2. SELECT * FROM `dimensions_available_phones` WHERE avaiblable = 1 1478

Pozdrawiam

Ten post edytował nikos 19.07.2017, 13:03:14
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No a nie jest tak, ze w tabeli drugiej masz kilka rekordow dla ktorych subiekt_id wskazuje na ten sam index?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nikos
post
Post #3





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 30.03.2009

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


Cytat(nospor @ 19.07.2017, 14:09:55 ) *
No a nie jest tak, ze w tabeli drugiej masz kilka rekordow dla ktorych subiekt_id wskazuje na ten sam index?

Właśnie tak jest! Tego bym się nie spodziewał!
Dzięki

Czy na pierwszy rzut oka widziałbyś jakąś modyfikację aby poprawić szybkość obciążenie bazy?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wykonujesz raptem 6 razy prosty UPDATE. Skoro przy czyms takim ci muli, to pewnie nie masz zalozonych indeksow na polach, po ktorych wyszukujesz zarowno przy select jak i update


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nikos
post
Post #5





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 30.03.2009

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


Cytat(nospor @ 19.07.2017, 14:48:01 ) *
Wykonujesz raptem 6 razy prosty UPDATE. Skoro przy czyms takim ci muli, to pewnie nie masz zalozonych indeksow na polach, po ktorych wyszukujesz zarowno przy select jak i update


Nie ma założonych indeksów na polach STAN i subiekt_id dodam je dzięki!
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 Aktualny czas: 20.08.2025 - 09:35