Avatar billede fjeh Nybegynder
24. oktober 2004 - 09:33 Der er 7 kommentarer og
2 løsninger

Problemer med mySQL SELECT sætning.

Hej eksperter,

Jeg har et problem med at få de korrekte data ud af en SELECT sætning.

Jeg har 2 tabeller:

Tabel 1: skuespiller
- skuespiller_id
- navn

Tabel 2: film_skuespiller
- film_id
- skuespiller_id

Skuespiller tabellen indeholder alle skuespillere i databasen.

Film_skuespiller tabellen indeholder en post for hver skuespiller som er tilknyttet en film. En film kan have mange skuespillere tilknyttet.

Problemet:
Når man ønsker at tilknytte en ny skuespiller til en film, skal kun de skuespillere, som ikke allerede er tilknyttet, vises.

Forslag:
Jeg har prøvet med følgende SELECT sætning, som ligger i en PHP funktion med $film_id som parameter:

("SELECT skuespiller.skuespiller_id AS id, skuespiller.navn, film_skuespiller.* FROM skuespiller, film_skuespiller
WHERE film_skuespiller.film_id = $film_id
AND film_skuespiller.skuespiller_id != skuespiller.skuespiller_id");

Problemet med ovenstående SELECT er at hvis der er mere end 1 skuespiller tilknyttet en film, vises også alle de skuespillere som allerede er tilknyttet filmen.

Håber der er en der hjælpe!!!!
Avatar billede Slettet bruger
24. oktober 2004 - 12:55 #1
Du skal jo ikke bruge felterne fra film_skuespiller-tabellen til andet end at udvælge skuespillerne, så der er ingen grund til at hente dem. (Især ikke, da de alligevel bare indeholder NULL.)

SELECT skuespiller.id AS id, skuespiller.navn AS navn
FROM skuespiller
LEFT JOIN film_skuespiller ON skuespiller.id=film_skuespiller
WHERE film_skuespiller.id IS NULL

Koden kommer (næsten umodificeret) fra http://dev.mysql.com/doc/mysql/en/JOIN.html
Avatar billede fjeh Nybegynder
24. oktober 2004 - 20:42 #2
Den SELECT du har skrevt tjekker jo ikke i forhold til variablen $film_id.

Jeg ønsker kun at finde de skuespillere som ikke allerede er tilknyttet en specifik film.

Jeg har tabellen Film, til gemme mine film i. Tabellen indeholder kollonnerne: film_id og titel.
Avatar billede Slettet bruger
24. oktober 2004 - 21:22 #3
Nej, det var en tanketorsk:

SELECT skuespiller.id AS id, skuespiller.navn AS navn
FROM skuespiller
LEFT JOIN film_skuespiller ON skuespiller.id=film_skuespiller
WHERE film_skuespiller.id IS NULL AND film_skuespiller.film_id=$film_id
Avatar billede Slettet bruger
24. oktober 2004 - 21:23 #4
Jeg går ud fra at skuespillere godt kan være tilknyttet mere end en film, og at det dermed ikke skal være en hindring, at de allerede er tilknyttet an anden fil end den aktuelle.
Avatar billede fjeh Nybegynder
25. oktober 2004 - 02:12 #5
Det er rigtigt hvad du skriver i din sidste kommentar. Men jeg kan stadig ikke få SELECT'en til at virke. Når jeg kører den for jeg ingen resultat-poster.

Kan det ikke være man skal bruge noget subQuery? Ved godt at det ikke virker i mySQL, men er der ikke noget der minder om det?
Avatar billede Slettet bruger
25. oktober 2004 - 06:49 #6
Det burde ikke være nødvendigt med en subselect. Må jeg anbefale dig at bruge or die(mysql_error()) på dine queries fra PHP - i alt fald mens du udvikler, for så havde vi nok hurtigere opdaget den fejl, jeg lige opdagede nu:

SELECT skuespiller.id AS id, skuespiller.navn AS navn
FROM skuespiller
LEFT JOIN film_skuespiller ON skuespiller.id=film_skuespiller.skuespiller_id AND film_skuespiller.film_id=$film_id
WHERE film_skuespiller.skuespiller_id IS NULL
Avatar billede fjeh Nybegynder
25. oktober 2004 - 08:47 #7
JUBIIII....

Nu virker det:)

Hvade faktisk brugt or die(mysql_error()), men syntes ikke fejlmeddelelserne gav meget hjælp.

Nu men nu virker det i hvert fald. 1000 tak for hjælpen.
Avatar billede Slettet bruger
25. oktober 2004 - 09:08 #8
Hvad skrev den da?

Bare syntax error near 'skuespiller.id=film_skuespiller' eller noget i den stil? Det havde nok også været nok til at jeg havde fanget den med, vil jeg da tro.

Eller sagde den at man forsøgte at sammenligne to ting, der ikke kunne sammenlignes?

Det er lidt (for ikke at sige meget) lettere at finde fejl, når man får fejlmeddelelser - eller i det mindste bare får at vide, at der kommer en fejlmeddelelse, for så ved man, at man skal lede efter syntaksfejl i koden.
Avatar billede fjeh Nybegynder
28. oktober 2004 - 01:51 #9
Kan ikke lige huske hvilken fejl den kom med.

Men jo du har ret.
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
Computerworld tilbyder specialiserede kurser i database-management

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