Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: DELETE z dwóch tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
bliitz
Witam

są dwie tabele o przykładowej strukturze:

artykuly
--------
id ( primary key )
id_autora
tekst

komentarze
-----------
id ( primary key )
id_artykulu
komentarz

Jak usuwając pozycję z tabeli artykuły automatycznie usunąć komentarze do tego artykułu. Wiem, że najprościej ustawić bazy jako InnoDB, ale mnie interesuje jak to zrobić w MyISAM.

mam takie zapytanie:
Kod
     'DELETE `artykuly`.*,
                `komentarze`.*
        FROM `artykuly`,
                `komentarze`
       WHERE artykuly.id = :id
         AND artykuly.id = komentarze.id_artykulu
          OR artykuly.id = :id'


jednak powoduje to usunięcie wszystkich danych z tabeli komentarze dry.gif
john_doe
taki sobie całkiem ten Twój temacik. Spróbowałem przerabiać zapytanie


  1. SELECT * FROM `atrykuly` art, koment kom WHERE art.id = kom.id AND kom.id = 1


ale nie wychodzi. Co mi przyszło do głowy to dwa razy delete zapuszczać i po kłopocie. Jeden na jednej tabeli drugi na drugiej z tymi samymi wartościami w klauzuli WHERE raz na kluczu podstawowym raz na obcym. Pytanie tylko czy to eleganckie rozwiązanie. Ale zawsze to jakiś trop/pomysł

pozdrawiam
bliitz
no właśnie chodzi o to żeby zrobić to w jednym zapytaniu a nie w dwóch, inne zapytanie, które mi przyszło do głowy to
Kod
'DELETE `artykuly`.*,
                `komentarze`.*
        FROM `artykuly`,
                `komentarze`
       WHERE artykuly.id = :id
         AND artykuly.id = komentarze.id_artykulu'


ale wtedy w przypadku gdy nie ma komentarzy do artykułu to nie zostanie on usunięty
skowron-line
Npisz sobie Trigera który będzie który po usunięciu z tabeli Artykuly automatycznie usunie komentarze z tabeli o zadanym id artykulu.
artega
Użyj złączenia:
  1. DELETE artykuly.*, komentarze.* FROM artykuly LEFT JOIN komentarze ON (komentarze.id_artykulu = artykuly.id) WHERE artykuly.id = 1
bliitz
Cytat(artega @ 10.02.2009, 10:55:33 ) *
Użyj złączenia:
  1. DELETE artykuly.*, komentarze.* FROM artykuly LEFT JOIN komentarze ON (komentarze.id_artykulu = artykuly.id) WHERE artykuly.id = 1


niestety nie działa, tzn. usuwa artykuł i komentarze prawidłowo, jednak w sytuacji gdy do artykułu nie ma żadnego komentarze to artykuł nie jest usuwany
artega
Cytat
niestety nie działa, tzn. usuwa artykuł i komentarze prawidłowo, jednak w sytuacji gdy do artykułu nie ma żadnego komentarze to artykuł nie jest usuwany

Upewnij się, że używasz lewego złączenia na komentarzach.
bliitz
Cytat(artega @ 10.02.2009, 13:01:55 ) *
Upewnij się, że używasz lewego złączenia na komentarzach.


faktycznie wcześniej było samo JOIN z LEFT JOIN działa jak trzeba smile.gif
thx
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.