Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> MySQL, PHP - polaczenie z trzema bazami i sumowanie.
fcppl
post 31.08.2020, 23:00:41
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

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


witam,
Mam trzy te same bazy (trzy te same strony z produktami na różnych domenach).
Chciałem połączyć się do pierwszej, drugiej i trzeciej bazy i pobrać dane z kolumny product_sales
Dodać te wartości i uzupełnić we wszystkich trzech bazach aktualne dane.

Baza na każdej stronie jest identyczna:

Baza 1
ID | product_in_stock | product_sales | id_prod
1 | 30 | 5 | PL555

Baza 2
ID | product_in_stock | product_sales | id_prod
1 | 30 | 4 | PL555

Baza 3
ID | product_in_stock | product_sales | id_prod
1 | 30 | 2 | PL555

Czyli zapytanie powinno wyglądać tak:
Dodaje (product_in_stock) 5 + 4 + 2 = 11

I wartość 11 w kolumnie product_in_stock aktualizuje się w trzech bazach.

Nie wiem jak się za to zabrać na trzech bazach jednocześnie. Z jedna baza danych nie mam problemu.
Proszę o pomoc.

Ten post edytował fcppl 31.08.2020, 23:07:35
Go to the top of the page
+Quote Post
nospor
post 1.09.2020, 08:52:40
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Na pewno chodzi ci o 3 rozne bazy a nie o 3 rozne tabele? Bo to dosc znaczaca roznica


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

"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
fcppl
post 1.09.2020, 09:07:53
Post #3





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

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


tak, chodzi o trzy różne bazy.

Chodzi mi o zebranie tych informacji z trzech baz danych i na podstawie sprzedanych produktów uzupełnić informację.

Przykład: Mam 4 rowery w szybkiej dostawie (48 godzin). Wszystkie są wystawione na osobnym sklepie i chciałem policzyć ilość sprzedanych w danym sklepie i jeżeli suma będzie zero to produkt się przełączy na standardową dostawę np: 2 tygodnie.

Z wszystkim sobie daję radę tylko problem mam z tym co opisałem w poście powyżej.

Ten post edytował fcppl 1.09.2020, 09:14:51
Go to the top of the page
+Quote Post
nospor
post 1.09.2020, 09:38:31
Post #4





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




No to najzwyklej w swiecie musisz sie polaczyc do tych 3 baz i pobrac info ktore ci interesuje. Polaczyc sie chyba umiesz?


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

"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
viking
post 1.09.2020, 10:00:23
Post #5





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Bazy są na tej samej maszynie?


--------------------
Go to the top of the page
+Quote Post
fcppl
post 1.09.2020, 11:57:18
Post #6





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

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


Połączyć się z bazami nie mam problemu. Nie wiem tylko jak mam odebrać te dane i zsumować żeby później je zapisać do 3 baz.

Nie bazy są na osobnych maszynach.

Ten post edytował fcppl 1.09.2020, 11:59:30
Go to the top of the page
+Quote Post
nospor
post 1.09.2020, 12:04:16
Post #7





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




No jak to jak? Laczysz sie z baza, robisze select by pobrac liczbe elementow i tak 3 razy.
Dodajesz sobie te 3 liczby a potem na kazdej z baz robisz update. Taka sama logika co z jedna baza danych przy pobieraniu danych i update tylko ze tu powtorzona 3 razy


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

"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
fcppl
post 1.09.2020, 12:14:30
Post #8





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

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


Mogę prosić o jakiś prosty przykład jak to zrobić 3 raz. Tzn pobrać dane, dodac i zrobic update?

Ten post edytował fcppl 1.09.2020, 12:14:41
Go to the top of the page
+Quote Post
nospor
post 1.09.2020, 12:35:30
Post #9





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




Cytat
jak to zrobić 3 raz

Dokladnie tak samo jak 1 raz tylko ze powtorzone dla 3 baz....

pokaz jak to robisz 1 raz


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

"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
fcppl
post 1.09.2020, 13:20:27
Post #10





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

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


Najpierw sie łącze do bazy A i B i wyświetlam tylko produkty które maja wpisana wartość w kolumnie id_prod

$result_a = mysqli_query($conn_a,"SELECT * FROM tabela WHERE id_prod is not null");

$result_b = mysqli_query($conn_b,"SELECT * FROM tabela WHERE id_prod is not null");

I tutaj się zaczynają moje problemy bo nie wiem zsumować kolumny product_sales. próbuję w pętli "while", ale wyświetla mi dane jako osobne z dwóch baz danych.

Chodzi mi też o to, że takich produktów maja kilka więc za jednym razem chce sprawdzić i aktualizować kilka produktów.

p.s na ta chwilę nie robię update bo utkwiłem na sumowaniu.
Go to the top of the page
+Quote Post
gino
post 1.09.2020, 13:54:51
Post #11





Grupa: Zarejestrowani
Postów: 319
Pomógł: 52
Dołączył: 18.02.2008

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


nie
Kod
SELECT * FROM tabela...


tylko
Kod
SELECT SUM(product_in_stock) AS sum_sales FROM tabela ...


i pobierz do zmiennej to sum_sales i tak 3 razy

gino

Ten post edytował gino 1.09.2020, 13:58:22
Go to the top of the page
+Quote Post
fcppl
post 1.09.2020, 23:37:22
Post #12





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

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


Udało mi się zrobić takim zapytanie z pomocą podpowiedzi gino i fajnie dostaje wynik w SQL z poszczególnej bazy, tylko za cholerę nie mogę wyciągnąć do zmiennej sum_sales i zsumować te pola z dwóch baz. Próbowałem w pętli "while" ale niestety nie daje rady. Mogę prosić o jakiś przykład jak to zrobić?

$result_a = mysqli_query($conn_a,"SELECT SUM (product_sales) AS sum_sales, id_prod as id_produkt FROM tabela WHERE id_prod is not null GROUP BY id_prod")

$result_b = mysqli_query($conn_b,"SELECT SUM (product_sales) AS sum_sales, id_prod as id_produkt FROM tabela WHERE id_prod is not null GROUP BY id_prod")
Go to the top of the page
+Quote Post
gino
post 2.09.2020, 07:15:27
Post #13





Grupa: Zarejestrowani
Postów: 319
Pomógł: 52
Dołączył: 18.02.2008

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


piszę z pamięci więc do sprawdzenia, dawno nie używałem mysqli:

Kod
$my_con1 = new mysqli("host1", "user", "password", "db_name1");
$my_con2 = new mysqli("host2", "user", "password", "db_name2");
$my_con3 = new mysqli("host3", "user", "password", "db_name3");

$qr = "SELECT SUM(product_in_stock) AS sum_sales FROM tabela WHERE id_prod is not null";

$result = $my_con1->query($qr);
$tab = $resutl->fetch_assoc();
$sum_sales = $tab['sum_sales'];
$result->free();

$result = $my_con2->query($qr);
$tab = $resutl->fetch_assoc();
$sum_sales += $tab['sum_sales'];
$result->free();

$result = $my_con3->query($qr);
$tab = $resutl->fetch_assoc();
$sum_sales += $tab['sum_sales'];
$result->free();

echo $sum_sales;


plus obsługę błędów połączenia trzeba zrobić.
plus cały ten rozdział do przeczytania.

Edit: po zrobienu inserta zamknięcie połączeń.

gino

Ten post edytował gino 2.09.2020, 08:17:34
Go to the top of the page
+Quote Post
fcppl
post 2.09.2020, 09:05:09
Post #14





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

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


dziękuje za pomoc. Zastosowałem się do wskazówek i coś ruszyło do przodu smile.gif.

Zrobiłem tak:

  1. $my_con1 = new mysqli('localhost', 'user1', 'pass1', 'db1');
  2. $my_con2 = new mysqli('localhost', 'user1', 'pass2', 'db2');
  3.  
  4.  
  5. $qr = "SELECT SUM(product_sales) AS sum_sales, id_prod as id FROM tabela WHERE id_prod is not null GROUP BY id_prod";
  6.  
  7. $result = $my_con1->query($qr);
  8.  
  9. $tab = $result->fetch_assoc();
  10. $sum_sales = $tab['sum_sales'];
  11. $id = $tab['id'];
  12. $result->free();
  13.  
  14.  
  15. $result = $my_con2->query($qr);
  16.  
  17. $tab = $result->fetch_assoc();
  18. $sum_sales += $tab['sum_sales'];
  19. $id = $tab['id'];
  20. $result->free();
  21.  
  22. echo $id .' - '. $sum_sales;


Wynik otrzymuję taki: PL8184 - 9, teraz własnie nie wiem jak to wyświetlić w pętli zeby mi pokazało wszystkie trzy produkty czyli:

PL8184 - 9
PL8185 - 0
PL8186 - 12

Tutaj załączam jak wygląda wynik po zapytaniu w phpmyadmin:


Go to the top of the page
+Quote Post
gino
post 2.09.2020, 10:01:34
Post #15





Grupa: Zarejestrowani
Postów: 319
Pomógł: 52
Dołączył: 18.02.2008

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


no ok, tylko teraz chcesz coś innego niż w pierwszym poście, bo chciałeś sumować konkretne ilości, w każdym zapytaniu zamiast:

Kod
$tab = $result->fetch_assoc();
$sum_sales = $tab['sum_sales'];
$id = $tab['id'];


daj:

Kod
if ($result = $my_con1->query($qr)) {

    while ($tab = $result->fetch_assoc()) {
        echo $tab['id']."-".$tab['sum_sales'];
    }
    $result->free();
}


zmieniając za każdym razem $my_con1na kolejny.

gino
Go to the top of the page
+Quote Post
fcppl
post 2.09.2020, 11:06:00
Post #16





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 11.04.2010

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


to rozwiązanie wyświetla w pętli dane do danej bazy (osobno), nie sumuje produktów żeby wynik był taki:

PL8184 - 9 (PL8184 z bazy 1 = 5 i PL8184 z bazy 2 = 4 razem 9)
PL8185 - 0 (PL8185 z bazy 1 = 0 i PL8185 z bazy 2 = 0 razem 0)
PL8186 - 12 (PL8186 z bazy 1 = 2 i PL8186 z bazy 2 = 10 razem 12)

Ten post edytował fcppl 2.09.2020, 11:07:46
Go to the top of the page
+Quote Post
Tomplus
post 2.09.2020, 11:40:12
Post #17





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


Pomyśl trochę dlaczego nie sumuje?

Wystarczy trochę zmodyfikować i:

  1. $salesElement = [];
  2. while ($tab = $result->fetch_assoc()) {
  3. $salesElement[$tab['id']] = isset($salesElement[$tab['id']]) ? $salesElement[$tab['id']] + $tab['sum_sales'] : $tab['sum_sales'];
  4. }


Linia skomplikowana aby nie pojawiły sie notice Undefined offset.
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.03.2024 - 15:09