13. maj 2006 - 17:17Der er
8 kommentarer og 1 løsning
Slette fra flere tabeller i MySQL
Hej eksperter
Jeg har en database med 3 tabeller. En tabel til at holde information om alle filer der er blevet uploadet. Dernæst har jeg en tabel til at holde styr over filer, der er blevet tildelt en type produkter, og en tabel til at holde styr over filer der er tildelt en anden type produkter.
Problemet ligger i, at når en fil slettes, så skal alle rækker i tabellerne der holder styr over tildelingen slettes.
Jeg har forsøgt med følgende, uden held: DELETE FROM tabel1, tabel2 USING tabel1, tabel2 WHERE tabel1.fileId = (indsat ID) Or tabel2.fileId = (indsat ID)
Siden det her ikke virker, så må der være noget jeg gør forkert. Jeg tror syntaksen er korrekt, det er nok mere forståelsen der halter. Er der en der har et godt forslag (Det må ikke foregå i flere queries, da det netop er det jeg vil undgå)
Når du skriver tabel1.fileId = (indsat ID) AND tabel2.fileId (indsat ID) vil den så kigge på hver række i hver tabel, og enkeltvist vurdere tabel1's rækker mod om tabel1.fileId = (indsat ID) eller vil tabel2.fileId komme ind og påvirke hvordan det bliver slettet i tabel1?
Jeg tænkte mere på, hvordan resultatet ville blive, og jeg fandt ud af det ved at lave en select. Din metode gav 6 resultater, når jeg havde 2 i den ene og 3 i den anden. Det samme skete, når jeg lavede et join med den tabel, som holder de id'er.
Din metode er dog klart den nemmeste, og det ser ud til at fungere uden problemer, så du kan da lige smide et svar
Hov, du kan desværre ikke svare endnu, for din metode virker ikke, hvis id'et kun optræder i en af tabellerne. Hvis jeg skifter AND ud med OR, sletter den så ikke bare hele lortet i begge tabeller?
Lad os forestille os følgende. Jeg har to filer med id 25 og 57, disse er oprettet i tabellen filer, der indeholder information om filerne
Så har jeg picture_assignment1 og picture_assignment2
picture_assignment1 indeholder en række med 25 hvor den bliver tildelt picture_assignment2 indeholder både en række med 25 og en række med 57
Jeg ved ikke på forhånd, om den fil der skal slettes, er tildelt i begge eller kun den ene, hvorfor jeg skal have en query, der kan gennemføres, selvom den kun findes i den ene, dem begge eller slet ingen.
Hvad er det så du siger, jeg skal ændre i min struktur?
Har ikke lige helt forstået din opbygning, men fra den første tabel bliver 25 57 og andre vel tildelt ud fra en kolonne som er primary og autoincrement?
Så er det jo den du skal holde fast i som en start. Hvis tallet også kan findes i en anden tabel, i flere forskellige kolonner, så er det vel blot at putte en det felt med i din OR
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.