18. august 2005 - 09:26Der er
13 kommentarer og 1 løsning
Join, med kommaseperaret input
Hejsa
Hvis man nu har en tabel, dvd, over nogle DVD film, som indeholder: titel, længde og genre
En anden tabel, genre, indeholder alle genrene, f.eks:
id | genre 1 Komik 2 Krimi
Hvis en film så er en krimi og en komedie, og man i tabellen dvd i rækken genre indsætter "1,2", fordi jo både er en krimi og en komedie, kan man så lave en join på dette?
Håber spørgsmål er forståeligt. Hvis man ikke kan lave en join direkte på ovenstående, er det så muligt at lave det på en anden måde, men med samme princip?
Hmm, det bliver da vidst lidt voldsomt. Men, det er vel stadig bedre, end at lade client først finde alle film, og så spørge databasen om hver enkelt genre, eller?
Hmm, jeg sad bare lige og tænkte på en opskrifts database, hvor der er årstid, højtid, kategori og tidspunkt. Dvs. en tabel til opskrifter, fire til kategorierne og fire til at sammenholde kategorier og opskrifter. Dvs. ni tabeller :)
Helt i orden - men ja, databaser kan komme til at indeholde rigtig mange tabeller til meget simple, men med de rette indexes kan det sagtens gå lynhurtigt, hvis man får det tænkt korrekt :)
Indexer kan laves på mange måder og bruges til at speede sine queries op. For eksempel ville man lave et foreign key index på begge attributter i denne dvd-genre-tilhørsforholds-tabel :)
-- Find alle genrer for en film ud fra id SELECT genre.genre FROM filmgenre INNER JOIN genre ON genre.id = filmgenre.genre_id WHERE filmgenre.film_id = ?
Hvordan havde du forestillet dig, at det skulle komme i en række? Altså, du henter en række med filmen og en række for hver genre. Du kan ikke kombinere rækker og søjler på den måde.
Men du kan godt hente det hele i en sætning - så får du bare en masse ekstra data, som for eksempel filmens beskrivelse flere gange.
Jeg håbede lidt på, at MySQL kunne sætte genrene på en kommasepareret liste :)
Hmm, er det så ikke lige så nemt bare at hente id'ene for genre ud, lav en ny forespørgelse på disse ide i genre rækken, og så har man dem. Så spare man også en tabel.
Hvad er der godt ved at spare en tabel? Og hvad er der godt ved at lave dårligt databasedesign? :/
Og hvis du har mysql 4.1, så er der faktisk kommet en group_concat, der kan lige hvad du søger :)
Synes godt om
Ny brugerNybegynder
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.