ďťż
Podstrony
|
telcocafepowiedzmy, że mam 2 tabele:klienci( id int not null auto_increment primary key, nazwa varchar(30) not null ) zamowienia( id int not null auto_increment primary key, idklienta int not null default 0, nazwa_towaru varchar(30) not null ) pole "zamowienia.idklienta" może być większe bądź równe 0. jeśli jest równe 0 - wtedy podejmuję odpowiednią akcję. jeśli jest większe od 0 - przypisuję do niego klienta. ale jak wykryć rekordy tabeli "zamowienia", których idklienta jest niepoprawne (na przykład dane klienta zostały usunięte)? Jeśli robisz sklep, to albo razem z klientem usuwasz wszelkie po nim ślady, by nie było takich sytuacji, jak teraz, albo dezaktywujesz klienta, za czym idą wszystkie przypisane do niego elementy w bazie. W sytuacji, jaką masz tutaj wyjściem jest pobranie identyfikatorów klientów, wrzucenie ich do tablicy, dodanie do tego zera i usunięcie zamówień, które nie mają identyfikatora klienta takiego, jak w tablicy. Jest to jednak nieoptymalne rozwiązanie i sprawdza się jedynie przy niewielkiej ilości klientów (im więcej klientów, tym dłuższe później będzie zapytanie usunięcia błędnych zamówień). Przykład:delete from zamowienia where idklienta not in (0,1,2,3,4,5,6,7,8,9,10,11,12) Można zrobić odwrotnie: SELECT z.* FROM zamowienia z LEFT JOIN klienci k ON z.idklienta = k.id WHERE k.id IS NULL Możesz wykonać to zapytanie np. w phpMyAdminie i ręcznie skasować wyświetlone wiersze lub wybrać tylko "id" i skasować metodą opisaną wyżej. Użytkownik Kozack edytował ten post 07 marzec 2010, 09:50 dzięki za odpowiedzi. w tej chwili skorzystam ze sposobu Kozack'a, bo inaczej nie wyczyszczę bazy. na szczęście w PHPMyAdminie można zaznaczać wiele rekordów do usunięcia :D |
|||
Sitedesign by AltusUmbrae. |