MySQL, PHP - polaczenie z trzema bazami i sumowanie. |
MySQL, PHP - polaczenie z trzema bazami i sumowanie. |
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 |
|
|
1.09.2020, 08:52:40
Post
#2
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 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 |
|
|
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 |
|
|
1.09.2020, 09:38:31
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 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 |
|
|
1.09.2020, 10:00:23
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 366 Pomógł: 1115 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Bazy są na tej samej maszynie?
-------------------- |
|
|
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 |
|
|
1.09.2020, 12:04:16
Post
#7
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 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 |
|
|
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 |
|
|
1.09.2020, 12:35:30
Post
#9
|
|
Grupa: Moderatorzy Postów: 36 468 Pomógł: 6300 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 |
|
|
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. |
|
|
1.09.2020, 13:54:51
Post
#11
|
|
Grupa: Zarejestrowani Postów: 321 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 |
|
|
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") |
|
|
2.09.2020, 07:15:27
Post
#13
|
|
Grupa: Zarejestrowani Postów: 321 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 |
|
|
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 .
Zrobiłem tak:
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: |
|
|
2.09.2020, 10:01:34
Post
#15
|
|
Grupa: Zarejestrowani Postów: 321 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 |
|
|
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 |
|
|
2.09.2020, 11:40:12
Post
#17
|
|
Grupa: Zarejestrowani Postów: 1 844 Pomógł: 227 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Pomyśl trochę dlaczego nie sumuje?
Wystarczy trochę zmodyfikować i:
Linia skomplikowana aby nie pojawiły sie notice Undefined offset. |
|
|
Wersja Lo-Fi | Aktualny czas: 28.05.2024 - 15:07 |