Kom ihåg mig?

Hjälp med en SQL-fråga

Ämnesverktyg Visningsalternativ
Oläst 2006-07-24, 18:56 #1
Venice Venice är inte uppkopplad
Medlem
 
Reg.datum: Jan 2004
Inlägg: 94
Venice Venice är inte uppkopplad
Medlem
 
Reg.datum: Jan 2004
Inlägg: 94
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...
Venice är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-24, 19:05 #2
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
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
Däremot förstår jag inte riktigt hur tabellerna i din databas är kopplade mot varandra. Jag tror du får rita upp hur tabellerna hänger ihop och posta en bild.

Framförallt känns det som att du har rätt dålig struktur på databasen.
jonny är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-24, 19:29 #3
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
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.)
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-24, 19:31 #4
Spindels avatar
Spindel Spindel är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 2 486
Spindel Spindel är inte uppkopplad
Klarade millennium-buggen
Spindels avatar
 
Reg.datum: Mar 2004
Inlägg: 2 486
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.
Spindel är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-24, 19:45 #5
Venice Venice är inte uppkopplad
Medlem
 
Reg.datum: Jan 2004
Inlägg: 94
Venice Venice är inte uppkopplad
Medlem
 
Reg.datum: Jan 2004
Inlägg: 94
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 vet inte om det finns mer data el liknande som gör en liknande lösning omöjlig, du får vara lite tydligare.)
Det finns bra många fler tabeller kopplade runt dessa så jag måste ta den vägen genom tabellerna för att hämta ID-nummern och Titlar från tabellen Film och DVD.
Jag har sedan tidigare tabellerna Film, dvd_Film och dvd, Det är endast film_minsamling och film_minsamling_DVD som är "nya"

Citat:
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.
Vad är en ER-modell?
Venice är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-24, 20:31 #6
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
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.
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-24, 20:51 #7
Spindels avatar
Spindel Spindel är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 2 486
Spindel Spindel är inte uppkopplad
Klarade millennium-buggen
Spindels avatar
 
Reg.datum: Mar 2004
Inlägg: 2 486
Citat:
Originally posted by Venice@Jul 24 2006, 19:45
Citat:
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.
Vad är en ER-modell?
Bilder på ER-modeller
Spindel är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-07-24, 21:00 #8
Venice Venice är inte uppkopplad
Medlem
 
Reg.datum: Jan 2004
Inlägg: 94
Venice Venice är inte uppkopplad
Medlem
 
Reg.datum: Jan 2004
Inlägg: 94
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...
Venice är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 12:26.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017