fcppl
31.08.2020, 23:00:41
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.
nospor
1.09.2020, 08:52:40
Na pewno chodzi ci o 3 rozne bazy a nie o 3 rozne tabele? Bo to dosc znaczaca roznica
fcppl
1.09.2020, 09:07:53
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.
nospor
1.09.2020, 09:38:31
No to najzwyklej w swiecie musisz sie polaczyc do tych 3 baz i pobrac info ktore ci interesuje. Polaczyc sie chyba umiesz?
viking
1.09.2020, 10:00:23
Bazy są na tej samej maszynie?
fcppl
1.09.2020, 11:57:18
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.
nospor
1.09.2020, 12:04:16
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
fcppl
1.09.2020, 12:14:30
Mogę prosić o jakiś prosty przykład jak to zrobić 3 raz. Tzn pobrać dane, dodac i zrobic update?
nospor
1.09.2020, 12:35:30
Cytat
jak to zrobić 3 raz
Dokladnie tak samo jak 1 raz tylko ze powtorzone dla 3 baz....
pokaz jak to robisz 1 raz
fcppl
1.09.2020, 13:20:27
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.
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
fcppl
1.09.2020, 23:37:22
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")
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
fcppl
2.09.2020, 09:05:09
dziękuje za pomoc. Zastosowałem się do wskazówek i coś ruszyło do przodu

.
Zrobiłem tak:
$my_con1 = new mysqli('localhost', 'user1', 'pass1', 'db1');
$my_con2 = new mysqli('localhost', 'user1', 'pass2', 'db2');
$qr = "SELECT SUM(product_sales) AS sum_sales, id_prod as id FROM tabela WHERE id_prod is not null GROUP BY id_prod";
$result = $my_con1->query($qr);
$tab = $result->fetch_assoc();
$sum_sales = $tab['sum_sales'];
$id = $tab['id'];
$result->free();
$result = $my_con2->query($qr);
$tab = $result->fetch_assoc();
$sum_sales += $tab['sum_sales'];
$id = $tab['id'];
$result->free();
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:
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
fcppl
2.09.2020, 11:06:00
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)
Tomplus
2.09.2020, 11:40:12
Pomyśl trochę dlaczego nie sumuje?
Wystarczy trochę zmodyfikować i:
$salesElement = [];
while ($tab = $result->fetch_assoc()) {
$salesElement[$tab['id']] = isset($salesElement[$tab['id']]) ?
$salesElement[$tab['id']] + $tab['sum_sales'] : $tab['sum_sales']; }
Linia skomplikowana aby nie pojawiły sie notice Undefined offset.
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.