Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]Deduplikacja z pewnym udziwnieniem
Forum PHP.pl > Forum > Przedszkole
Lopmer
Hej,

Mam następującą sytuację:


Mamy przykładowo 2 tabele: 'tabela1' i 'tabela2' zawierające dokładnie takie same kolumny. Nazwijmy je dla przykładu: email, rodzaj, odp_ankieta

email - tu nic nie trzeba mówić, wiadomo.
rodzaj - w tabela1 mamy podział na 2 typy, np.: policjant, strażak. W tabela2 mamy tylko wartość żołnierz
odp_ankieta - przyjmuje 2 wartości: tak/nie.

W czym jest problem ? Chciałbym zdeduplikować te dane przy jednoczesnej aktualizacji na następującej zasadzie:

Jeżeli spotkamy się z taką sytuacją, że w jednej tabeli będzie:

  1. email, rodzaj, odp_ankieta
  2. zolnierz@wp.pl, zolnierz, nie


a w drugiej z tym samym mailem:

  1. email, rodzaj, odp_ankieta
  2. zolnierz@wp.pl, policjant (lub strazak), tak


to aktualizujemy dane w tabela2 na nastepujace:

  1. email, rodzaj, odp_ankieta
  2. zolnierz@wp.pl, zolnierz, tak


A rekord z tabela1 usuwamy.


Czyli w przełożeniu tylko na słowa: w momencie kiedy w tabela1 napotkamy na rekord, w ktorym email pokrywa sie z jakimś w tabela2 (czyli w pewnym sensie zolnierz okazuje sie strazakiem/policjantem) to usuwamy rekord z tabela1 i aktualizujemy dane w tabela2 POD WARUNKIEM, ŻE POLE 'ODP_ANKIETA' w tabela1 przy tym rekordzie zawierała odpowiedź 'TAK'. W przeciwnym wypadku tylko usuwamy rekord z tabela1 nic więcej nie robiąc.

Mam nadzieję, że nie pogmatwałem za bardzo. Będę wdzięczny za jakąkolwiek wskazówkę. Nie wiem szczerze mówiąc czy da się tutaj skorzystać tylko i wyłącznie z SQL'a ;/

Pozdrawiam.
marlic
Nie wiem w jakim silniku bazodanowym to robisz ale jeżeli obsługiwane są podzapytania to można to zrobić np. takimi dwoma SQL-ami:
  1. UPDATE tabela2
  2. SET odp_ankieta = 'tak'
  3. WHERE email = (
  4. SELECT tabela1.email
  5. FROM tabela1, tabela2
  6. WHERE tabela1.email = tabela2.email
  7. AND (tabela1.odp_ankieta = 'tak' OR tabela2.odp_ankieta = 'tak')
  8. );
  9.  
  10. DELETE FROM tabela1
  11. WHERE email = (
  12. SELECT tabela1.email
  13. FROM tabela1, tabela2
  14. WHERE tabela1.email = tabela2.email
  15. AND (tabela1.odp_ankieta = 'tak' OR tabela2.odp_ankieta = 'tak')
  16. );
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.