Avatar billede lillebror Nybegynder
13. maj 2006 - 17:17 Der 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å)
Avatar billede showsource Seniormester
13. maj 2006 - 17:27 #1
id er vel samme i alle tabeller?
Men prøv med:

DELETE FROM tabel1, tabel2
WHERE tabel1.fileId = (indsat ID) AND tabel2.fileId = (indsat ID)

Kræver dog mysql ver. 4.1 eller højere, mener jeg.
Avatar billede lillebror Nybegynder
13. maj 2006 - 17:37 #2
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?
Avatar billede showsource Seniormester
13. maj 2006 - 17:45 #3
WHERE tabel1.fileId = 2 AND tabel2.fileId = 2

fileId i begge tabeller, skal det være 2
Og du har formodentlig gemt samme id i forskellige tabeller!
Hvis ikke, så lav det lige om! :O)

(navn på kolonne behøver ikke være ens i forskellige tabeller)
Avatar billede lillebror Nybegynder
13. maj 2006 - 17:47 #4
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
Avatar billede lillebror Nybegynder
13. maj 2006 - 17:53 #5
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?
Avatar billede showsource Seniormester
13. maj 2006 - 17:57 #6
well, så er det jo jeg vil ha' du skal lave det om! :O)

Omend jeg selvf. jo ikke ved præcis hvordan din side er bygget op!

Men bruger du OR i stedet for AND vil der jo blive slettet fra hver tabel hvor kolonne navn er f.eks. 2
Avatar billede lillebror Nybegynder
13. maj 2006 - 18:04 #7
Men hvordan vil du have jeg skal lave det om?

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?
Avatar billede showsource Seniormester
13. maj 2006 - 21:04 #8
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
Avatar billede lillebror Nybegynder
10. september 2006 - 11:33 #9
Jeg gav op og lavede det i to queries
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester