Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem z porównaniem dwóch tabel (wzorzec i tab aktualizowana)
artvip
post 21.11.2009, 09:12:57
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 15.02.2009

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


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.



Go to the top of the page
+Quote Post
maly_swd
post 21.11.2009, 12:13:17
Post #2





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


  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


Ten post edytował maly_swd 21.11.2009, 12:15:42


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
artvip
post 22.11.2009, 16:38:05
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 15.02.2009

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


Dziękuję. Dokładnie o to chodziło smile.gif
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: 14.08.2025 - 10:41