FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
Jag har fastnat med en SQL-fråga till en ny funktion på min hemsida där man kan lägga till filmer till sin Samling för att göra en lista över vilka filmer man äger. Man skall kunna välja vilket format man har filmen på, VHS eller DVD, och man skall även kunna välja vilken DVD-utgåva man har (av dem som finns i databasen).
Jag har försökt ett tag nu med en SQL-fråga då jag skalla hämta informationen men har inte lyckas få den som jag vill. Hoppas någon här på WN kan hjälpa mig: Detta är vad jag vill att Frågan skall göra: Frågan skall hämta alla rader från "film_minsamling" där film_minsamling.Author_ID=X, och hämtar filmtiteln från "Film"-tabellen. Sen skall den även kolla om det finns några DVD-filmer kopplade till det film-iD-nummer som finns i "Film_minsamling" Genom att gå bakåt Via "dvd_film" > "dvd" till tabellen "film_minsamling_DVD" och hämta alla rader där film_minsamling_DVD.Author_ID=X. Med frågan nedan får jag följande Film 1 - DVD 1 Film 1 - DVD 2 Film 2 - DVD 3 Film 2 - DVD 4 Film 3 - DVD 5 Film 3 - DVD 6 Film 3 - DVD 7 Men jag vill ha: Film 1 - Ingen DVD Film 2 - DVD 3 Film 2 - DVD 4 Film 3 - DVD 5 Film 3 - DVD 7 Ant. DVD som skall hämtas/tot. ant. DVD kopplade till filmen Film 1: 0/2 DVD Film 2: 2/2 DVD Film 3: 2/3 DVD Kod:
SELECT film.am_tit, dvd.titel, film_minsamling.strVHS FROM (film_minsamling_DVD RIGHT JOIN (dvd INNER JOIN (dvd_film LEFT JOIN (film INNER JOIN film_minsamling ON film.film_ID=film_minsamling.filmID) ON dvd_film.film_ID=film.Film_ID) ON dvd_film.dvd_ID=dvd.dvd_ID) ON (dvd.dvd_ID=film_minsamling_DVD.DVD_ID AND film_minsamling_DVD.Author_ID=1)) WHERE film_minsamling.Author_ID=1 LIMIT 20 ///// Tabeller \\\\\ film_minsamling FilmID* Author_ID* strVHS strRecord Film Film_ID* am_tit --- DVD_film Film_ID* DVD_ID DVD DVD_ID* Titel --- film_minsamling_DVD DVD_ID* Author_ID* ////////////////////// Är det någon som vet hur jag skall göra... |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Supermoderator
|
Den första delen bör ju vara:
Kod:
SELECT Film.am_tit FROM Film, film_minsamling WHERE film_minsamling.Author_ID=X AND Film.Film_ID=film_minsamling.FilmID Framförallt känns det som att du har rätt dålig struktur på databasen.
__________________
Jonny Zetterström se.linkedin.com/in/jonnyz | bjz.se | sajthotellet.com | kalsongkungen.se | zretail.se | zetterstromnetworks.se | webbhotellsguide.se | ekonominyheter24.se | nyamobiltelefoner.se | gapskratt.se | antivirusguiden.se | jonny.nu |
||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Mycket flitig postare
|
Känns lite som du har en överkomplicerad struktur med för många tabeller.
Varför inte bara ha filmid INT, mediatyp SET('DVD','VHS','HD', …), filmtitel VARCHAR(63), ar YEAR, mm VARCHAR(…) eller liknande, då kan du ju göra enkla sökningar utan joins etc (Jag vet inte om det finns mer data el liknande som gör en liknande lösning omöjlig, du får vara lite tydligare.) |
|||
![]() |
![]() |
![]() |
#4 | |||
|
||||
Klarade millennium-buggen
|
Fixa gärna en ER-modell så man enklare förstår vad du menar. Känns lite väl rörigt nu - i alla fall för en som är utomstående.
|
|||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
Här en är en bild:
![]() På något sätt måste jag ställa frågan om det finns DVD-filmer kopplade till filmen, välj endast de där film_minsamling_DVD.author_ID=X. Om jag skulle lägga till film_minsamling_DVD.author_ID=X under WHERE så kommer ju endast få ut filmerna som har en DVD-kopplad till sig där film_minsamling_DVD.author_ID=X och filmer som man tex har på VHS och inte DVD kommer inte med... Citat:
Jag har sedan tidigare tabellerna Film, dvd_Film och dvd, Det är endast film_minsamling och film_minsamling_DVD som är "nya" Citat:
|
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Mycket flitig postare
|
Jag måste erkänna att jag inte förstår logiken i strukturen på dina tabeller (och hur mycket mer det finns av komplexitet utanför det du visat.)
Jag tror dock ändå att du måste förenkla strukturen och antalet tabeller för enkelt kunna tänka ut effektiva selectförfrågningar. För mycket tabeller är inte heller bra. Din select verkar väldigt komplex för att se om en av dina filer finns på DVD. En bra struktur på databasen gör sökningar snabbare och enklare att abstrahera och därmed lättare att tänka ut smidiga sökningar. Jag tycker nog att man inte borde behöva mer än tre tabeller för en filmsamling... men som sagt jag vet ju inte hur det ser ut i sin helhet. |
|||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Klarade millennium-buggen
|
Citat:
|
|||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Medlem
|
Jag tror inte att det går att förenkla tabellstrukturen så mycket mer än vad det är nu. Och som du sa, du vet inte hur det ser ut i helhet, och sidan är bra mycket mer än bara en filmsamling. Du kan ju kolla www.disneyfilmsidan.se för att få ett bättre helhet...
Jag har en annan lösning som jag tror kommer att fungera genom att använda två SQL-frågor, istället för en. Men det skulle vara toppen om jag fick det att fungera med endast en fråga... |
||
![]() |
![]() |
Svara |
|
|