Hej! Det är inte speciellt smidigt att ha de olika skådespelarna i olika kolumner, men det är en annan sak... Jag tycker du borde ändra datastrukturen mellan Movies och People till följande: Nej, jag har insett att det inte är så smidigt att ha skådespelare i olika kolumner, och tar gärna emot tips på en bättre lösning!!! Tabell People Eftersom det fins filmer som huvudpersonen regisserat så bör en person kunna ha flera roller inte bara en som i Olofs fall. Det klarar min datastruktur. Andreas: Tack för hjälpen. Strukturen verkar smart och logisk - även om jag nog måste plugga lite grundläggande DB-kunskap för att förstå allt.Novisfråga: ID VS Namn i Access
Är hel-novis på ASP, men har nu bestämt mig för att ge det ett försök.
Har använt min gamla filmdatabas (Access) och har nu följande problem (som jag håller på att bli galen på *ler*)
Databasen har 4 tabeller; Movies, People, Rating och Cathegory.
I tabellen Movies finns fält för HeadActor, Actor1, Actor2... tom Actor5, liknande upplägg för Producer och Director.
Dessa fält är kopplade till tabellen People som har följande kolumner: PeopleID, FirstName och LastName.
På en ASP-sida har laj listat samtliga filmer. bl a med följande lilla rad:
<A HREF = ShowMovie.asp?movie=<%=rs("MovieID")%>
Inget konstigt med den såklart, men på ShowMovie.asp använder jag följande för att fånga upp filmen:
SQL = "SELECT * From Movies WHERE MovieID = " & Movie & ""
Detta funkar ju skitbra, om det nu bara var data från Movies-tabellen jag vill åt. Visserligen finns ju allt i den tabellen, men om jag refererar till exempel till HeadActor publiceras ju bara PeopleID (från tabellen People).
Hur göra?
Tacksam för svar på denna förmodligen triviala alt. dumma fråga.
/MatsSv: Novisfråga: ID VS Namn i Access
Såhär gör man i alla fall:
SQL = "SELECT Movies.*, A.Name AS HeadActorName, B.Name AS Actor1Name, From ((Movies LEFT JOIN People A ON HeadActor = A.PeopleID) LEFT JOIN People B ON Actor1 = B.People) WHERE MovieID = " & Movie & ""
Hoppas att jag har fått parenteserna rätt nu...
/JohanSv: Novisfråga: ID VS Namn i Access
Tabell: Movies
Fält: MovieId
Fält: MovieTitle
osv...
Tabell: People
Fält: PeopleId
Fält: PeopleFirstName
Fält: PeopleLastName
osv...
Tabell: Relations
Fält: RelationId
Fält: RelationName
Tabell: MoviePeople
Fält: MoviePeopleId
Fält: MoviePeopleRelation -> Relations.RelationId
Fält: MoviePeopleMovie -> Movies.MovieId
Fält: MoviePeoplePeople -> People.PeopleId
Du får då en dynamisk datastruktur. Först skapar du roller. T.ex. : Head Actor, Actor, Director, Producer osv...
Sedan kan du relatera någon av personenrna till någon eller några relationer för en film.
Du har nu ingen begränsning på antalet personer. Dessutom får du mindre antal joins. Sv: Novisfråga: ID VS Namn i Access
Tack för SQL-satsen - Ska testa den genast, men är samtidigt rätt sugen på att börja i andra änden, nämligen att göra om databasen...
Andreas: I vilken tabell/fält är det tänkt att rollerna ska skapas enligt ditt exempel?
/MatsSv: Novisfråga: ID VS Namn i Access
---------------
Ident int (identitiy)
Name char (50)
Type int -> Relation till Tabell Type.Ident
Tabell Type
-------------
Ident int (identitiy)
Type char(50)
ex.
Tabell people
--------------------
Ident|Name|Type
......1|Olof..|......2
Tabell Type
---------------------
Ident|Type
......1|'B-Skådis'
......2|'A-Skådis'
Fråga:
select people.Name,type.Name from people
inner join type on type.Ident = people.type
Resultat:
Olof - 'A-Skådis'Sv: Novisfråga: ID VS Namn i Access
Här är ett litet exempel för Pulp Fiction och några av skådespelarna:
MovieId MovieTitle
1 Pulp Fiction
PeopleId PeopleFirstName PeopleLastName
1 Quentin Tarantino
2 John Travolta
3 Bruce Willis
RelationId RelationName
1 Director
2 Head actor
3 Actor
4 Producer
5 Executive Producer
6 Co-Executive Producer
7 Screenplay
MoviePeopleId MoviePeopleMovie MoviePeoplePeople MoviePeopleRelation MoviePeopleRoll
1 1 1 1
2 1 2 2 Vincent Vega
3 1 3 2 Butch Coolidge
4 1 1 3 Jimmie
5 1 1 7
Exempel på fråga:
SELECT Movies.MovieTitle, People.PeopleFirstName, People.PeopleLastName, Relations.RelationName, MoviePeople.MoviePeopleRoll
FROM Movies INNER JOIN (Relations INNER JOIN (People INNER JOIN MoviePeople ON People.PeopleId = MoviePeople.MoviePeoplePeople) ON Relations.RelationId = MoviePeople.MoviePeopleRelation) ON Movies.MovieId = MoviePeople.MoviePeopleMovie;
Vilket i detta fall ger:
MovieTitle PeopleFirstName PeopleLastName RelationName MoviePeopleRoll
Pulp Fiction Quentin Tarantino Director
Pulp Fiction John Travolta Head actor Vincent Vega
Pulp Fiction Bruce Willis Head actor Butch Coolidge
Pulp Fiction Quentin Tarantino Actor Jimmie
Pulp Fiction Quentin Tarantino Screenplay Sv: Novisfråga: ID VS Namn i Access
/Mats