Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z porównaniem dwóch tabel (wzorzec i tab aktualizowana)
Forum PHP.pl > Forum > Bazy danych > MySQL
artvip
Witam,

mam dwie bazy danych. Dane w tabelach powtarzają się jednak nie mają unikalnego ID po którym można kluczem porównywać pojedyncze rekordy. Baza 1 jest wzorcem a Baza 2 jest co 15 min aktualizowana. Muszę porównać bazę 2 do bazy jeden i zobaczyć jakie zmiany zostały poczynione. Przykład:

ID usera nazwa_umie poziom_umie
user 1 11 cos1 1
user 1 11 cos2 1
user 1 11 cos3 0
user 2 22 cos1 2
user 2 22 cos2 1
user 2 22 cos3 0
user 3 33 cos2 0
n n n n

Baza 2 wygląda bardzo podobnie - zmienia się może rekord dla user'aX.

Robiąc:
Select A.id_usera, A.nazwa_umie, A.poziom_umie, B.id_usera, B.nazwa_umie, B.poziom_umie from baza1 A, baza2 B where A.id_usera=B.id_usera and A.poziom_umie = B.poziom_umie and A.poziom_umie = B.poziom_umie and A.id_usera = '11'

Na podst tabeli powyżej zwraca mi wynik w postaci:
1)user1_11 - cos1 - 1
2)user1_11 - cos2 - 1
3)user1_11 - cos3 - 0

ale gdy Baza 2 dostanie aktualizację, że user1 przykład:
ID usera nazwa_umie poziom_umie
user 1 11 cos1 1
user 1 11 cos2 1
user 2 22 cos1 2
user 2 22 cos2 1
user 2 22 cos3 0
user 3 33 cos2 0
n n n n
i porównuję to z baza1 (czyli mój wzorzec) to dostaję wynik:
1)user1_11 - cos1 - 1
2)user1_11 - cos2 - 1

Moje pytanie - jak wyświetlić to dodatkowe pole z bazy1 (czyli mojego wzorca) dla user1 gdy jest we wzorcu bazy1 a nie ma już go w bazie2 - czyli coś takiego:
Baza1: Baza2:
1)user1_11 - cos1 - 1 1)user1_11 - cos1 - 1
2)user1_11 - cos2 - 1 2)user1_11 - cos2 - 1
3)user1_11 - cos3 - 0 3)puste pole

i czy w takiej formie jest to wykonalne?

Mam nadzieję, że jest zrozumiałe to co napisałem. Moja wiedza na temat SQL nie jest duża więc proszę o zrozumienie.

Z góry dziękuję za wszelką pomoc.



maly_swd
  1. SELECT * FROM baza1 b1 WHERE (b1.id_usera, b1.nazwa_umie, b1.poziom_umie) NOT IN (SELECT b2.id_usera, b2.nazwa_umie, b2.poziom_umie FROM baza2 b2)


takim zapytaniem wyciagasz roznice miedzy dwoma bazami/tabelami


albo:

  1. SELECT * FROM baza1 b1
  2. LEFT JOIN baza2 b2 ON b1.id_usera=b2.id_usera, b1.nazwa_umie=b2_nazwa_umnie, b1.poziom_umie=b2.poziom_umie
artvip
Dziękuję. Dokładnie o to chodziło smile.gif
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.