webForumDet fria alternativet

Jag behöver en funktion...

ASP

35 svar · 505 visningar · startad av timedia · sida 2 av 2

Frågan, av timedia

På min filmsajt listar jag skådisar som har spelat i aktuell film. Jag har ett arkiv med ca. 170 filmtitlar och nu tänker jag göra en funktion; Om skådisen har spelat i en annan film som är recenserad på sajten så ska skådisen visas som en länk till en sida som listar alla filmerna som han har deltagit i. Hur gör jag denna funktion? \------------------ www.moviemix.nu

Läs frågan i sin helhet →
Medlem sedan dec. 200012 464 inlägg
#21

En sak till, hur bör man egentligen namnge sina fält?

Jag föredrar att använda helt utskrivna ord. Förkortningar använder jag bara om det blir långa namn och då använder jag mer än en bokstav i förkortningen.

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20015 287 inlägg
#22

Nej, jag fixar inte det här.
Om jag ska ta fram alla fakta på en film får jag inte till det om jag ska ha personer i en tabell samt relationerna i en annan.
Jag tycker det verkar som att jag måste loopa mig genom tabellen movie på något sätt eftersom jag i den har flera lika - fld_m_mtid (mao kopplingar till den speciella filmen.)
Jag får bara ut en post.

[r]svammmel...

(snurrade till det lite mer än vanligt...)

------------------
/solbulle
Hemmabio | Spelautomater | The Who

[Redigerat av solbulle den 14 dec 2001]

Medlem sedan dec. 200012 464 inlägg
#23

Nej, i så fall får du göra en outer join där

select mt.*,p.* 
from tbl_movie_title mt inner join
tbl_movie m on mt.fld_m_id = m.fld_m_id 
left outer join tbl_person p
on m.fld_p_id = p.fld_p_id

Vad menar du med att du bara får ut en post? Hur ser presentationskoden ut?

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20015 287 inlägg
#24

Med att jag bara får ut en post (var lite trött då med...) menar jag att jag får bara ut en post om jag inte loopar det hela, men det kanske är självklart(?)
Nu har jag gjort så här i alla fall:


Visa film nummer:
<a href="film.asp?Visa=ja&ID=1">1</a> &#0124;
<a href="film.asp?Visa=ja&ID=2"> 2</a> &#0124;
<a href="film.asp?Visa=ja&ID=3"> 3</a> &#0124;
<a href="film.asp?Visa=ja&ID=4"> 4</a> &#0124;
<a href="film.asp?Visa=ja&ID=5"> 5</a> &#0124;
<a href="film.asp?Visa=alla"> Alla (ej implenterad ännu...)</a> &#0124;
<p>

<%
Set connect = Server.CreateObject("ADODB.Connection")
connect.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("db5.mdb")

If Request.QueryString("Visa") = "ja" And Request.QueryString("ID") <> "" Then

visaID = Request.QueryString("ID")

SQL = "select mt.*, p.*, d.* from tbl_PersonDoingInAMovie d, tbl_movie_title mt, tbl_movie m, tbl_person p where mt.fld_mt_id = m.fld_m_id and m.fld_s_id = d.fld_s_id and m.fld_p_id = p.fld_p_id and mt.fld_mt_id = " & visaID &""

Else

SQL = "select mt.*, p.*, d.* from tbl_PersonDoingInAMovie d, tbl_movie_title mt, tbl_movie m, tbl_person p where mt.fld_mt_id = m.fld_m_id and m.fld_s_id = d.fld_s_id and m.fld_p_id = p.fld_p_id "

'SQL = "select mt.*, p.* from tbl_PersonDoingInAMovie d, tbl_movie_title mt, tbl_movie m, tbl_person p where mt.fld_mt_id = m.fld_m_id and m.fld_p_id = p.fld_p_id"

End If

Response.Write SQL

set rs = connect.execute(SQL) 

found = not rs.eof
if found then

Response.Write "<p>"

'Do Until rs.EOF

Response.Write "<br>"

Response.Write "fld_mt_id: "
Response.Write rs("fld_mt_id")
Response.Write "<br>"

Response.Write "fld_mt_name: "
Response.Write rs("fld_mt_name")

Response.Write "<br>"

Response.Write "fld_p_firstname: "
Response.Write rs("fld_p_firstname")

Response.Write "<br>"

Response.Write "fld_p_id: "
Response.Write rs("fld_p_id")

Response.Write "<br>"

Response.Write "fld_p_bio: "
Response.Write rs("fld_p_bio")

Response.Write "<br>"

Response.Write "fld_s_id: "
Response.Write rs("fld_s_id")

Response.Write "<br>"

Response.Write "Description: "
Response.Write rs("Description")

Response.Write "<br>"

	'rs.MoveNext
	'Loop

	rs.close
	set rs = nothing
	connect.Close
	set connect = nothing
	End if  
%>

Jag har även lagt upp kod, exempel samt databas här. http://solbulle.digitalrice.com/wf/filmdatabas/kod.html

Mitt problem, som jag verkligen inte fattar hur man kan lösa med denna modell betår i av att hur ska jag göra för att tillsammans med en specifik film koppla samt få ut ur databasen alla inblandade personer, typ huvudroll, biroll, regissör, producent?

Putsningar på koden motttages gärna i övrigt. (Obs att alla Response.Write är temporära)

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan dec. 200012 464 inlägg
#25

Hur ser tabellen tbl_PersonDoingInAMovie ut. Varför finns den med alls?

Du borde lägga till en extra kolumn i tabellen tbl_movie i stället som innehåller vilken uppgift en viss person har i en film. Den kolumnen måste ingå i primärnyckeln då samma person kan göra flera saker i en film.

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20015 287 inlägg
#26

Ok, det var det du menade i ditt tidigare inlägg. Jag trodde du repeterade det som mrblonde skrev om en extra tabell: tbl_PersonDoingInAMovie.
Ja, varför den finns med vet jag inte riktigt - försöker lära mig av er alla.

Själv hade jag från början en tabell med alla fakta om en specifik film och i den en kolumn för skådespelare, regissör mfl. När sen problemetr med flera personer som skådespelare mfl positioner dök upp fick jag klart för mig att det bästa är att ägga personerna i en egen tabell.
Mitt problem är då nu hur jag kopplar ihop en viss film med en viss skådespelare, regissör mfl.
Min spontan tanke var att i ett fält i tabelln för filmen göra en koppling till tabellen med personer.
Men tydligen(?) är det bästa att separat koppla ihop "alltihop" i en separat tabell: tbl_movie .

Har inte riktigt klart för mig varför det är det bästa sättet?
-Alltid lättare att göra något när man vet vad man gör och varför :)

Min tbl_movie ser nu ut så här:

tbl_movie
---------
- fld_m_id Räknare (int autonumber)
- fld_m_mtid Tal
- fld_s_id Tal
- fld_p_id Tal

Där fld_s_id är kopplat till vad en person är för något; skådespelare osv.

Hur man nu ska kunna koppla ihop flera personer med samma eller och olika sysslor är för mig en gåta!?!

Du borde lägga till en extra kolumn i tabellen tbl_movie i stället som innehåller vilken uppgift en viss person har i en film

Tycker det är ungefär det jag har gjort, eller?

Den kolumnen måste ingå i primärnyckeln då samma person kan göra flera saker i en film.

Hmm... det där med att samma person kan göra flera saker köper jag, men hur den ska ingå i primärnyckeln...? = stort frågetecken!

Jag får slutligen ta och tacka för tålamodet hos er/dig.

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan dec. 200012 464 inlägg
#27

Du behöver inte ha någon räknare i tabellen tbl_movie då kombinationen av fld_m_mtid, fld_s_id och fld_p_id är unik. Det jag menade var att dessa kolumner tillsammans utgör primärnyckel för tabellen.

tbl_movie
---------
- fld_m_mtid Tal
- fld_s_id Tal
- fld_p_id Tal

Om du tar filmen Zorn som ett exempel, där spelade Gunanr Hellström huvudrollen och var samtidigt regissör.

tbl_movieTitle

id!title
1!Zorn

tbl_persons
id!namn
1!Gunnar Hellström
2!Richard Wolff
3!Stig Grybe
4!Ghitte Nörby

tbl_s
id!syssla
1!Regissör
2!Huvudroll kvinnlig
3!Huvudroll manlig
4!Biroll kvinnlig
5!Biroll manlig

så skulle du i tbl_movie få följande

mt_id!p_id!s_id
1!1!1
1!1!3
1!2!5
1!3!5
1!4!2

I så fall borde den select du har fungera om du loopar igenom alla poster.

(Osäker på kvinnliga huvudrollen.;))

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20015 287 inlägg
#28

Yes! Jag har till och med fått det att fungera! På tiden va?

Då var det bara det här med att man kanske skulle pröva sig på en join eftersom annars kan det ju knasa om det inte finns någon person i filmen. (i databasen)

Nu står jag med denna SQL-sats:

SQL = "select mt.*, p.*, d.* from tbl_PersonDoingInAMovie d, tbl_movie_title mt, tbl_movie m, tbl_person p where m.fld_m_mtid = mt.fld_mt_id and m.fld_s_id = d.fld_s_id and m.fld_p_id = p.fld_p_id and mt.fld_mt_id = " & visaID &""

och det vore bra om man kunde "bortse" från alla befattningar/personer om det är tomt i tbl_movie.
En join är väl svaret iofs, men det är även det över min förmåga hur jag får till det.

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan dec. 19996 721 inlägg
#29

En join har du redan gjort,i och med relationerna (en INNER JOIN). Det du letar efter är en OUTER JOIN.

SQL = "select mt.*, p.*, d.* from tbl_PersonDoingInAMovie d, tbl_movie_title mt, tbl_movie m LEFT OUTER JOIN tbl_person p ON m.fld_p_id = p.fld_p_id where m.fld_m_mtid = mt.fld_mt_id and m.fld_s_id = d.fld_s_id and mt.fld_mt_id = " & visaID &""
Medlem sedan mars 20015 287 inlägg
#30

Inte trodde jag att jag skulle få ettsvar så snabbt vid denna tidpunkt. :)
Men tyvärr får jag ett felmeddelande på den koden:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access Driver] Join expression not supported

???

------------------
/solbulle
Hemmabio | Spelautomater | The Who

Medlem sedan dec. 200012 464 inlägg
#31

Du gör en (inner) join nu. Det du behöver är en outer join.

SQL = "select mt.*, p.*, d.* " & _
"   from (( tbl_movieTitle mt left outer join tbl_movie m on m.fld_m_mtid = mt.fld_mt_id) " & _
"   left outer join tbl_PersonDoingInAMovie d on m.fld_s_id = d.fld_s_id) " & _
"   left outer join tbl_person p on  m.fld_p_id = p.fld_p_id " & _
" where mt.fld_mt_id = " & visaID

------------------
essentitia preter non sans multiplicandum

Medlem sedan mars 20015 287 inlägg
#32

GULD! Det fungerade perfekt!
(ett tabellnamn felstavat.)

TACK TACK TACK!

(btw Bor ni två här? ;) )
------------------
/solbulle
Hemmabio | Spelautomater | The Who

[Redigerat av solbulle den 16 dec 2001]

Medlem sedan mars 20002 836 inlägg
#33

Tillbaka till denna gamla tråd *ler*

tbl_movie behöver inte räknarfältet, eftersom det är en ren relationstabell.
Plocka ut filmerna med en SQL sats som matchar skådespelar_id i relationstabellen

Det med räknar fältet kommer ju in när man vill ta fram det unika idet för att tex redigera, ta bort, ja, man kan ju ha lagt in personen på fel film så att säga då är det smidigt med ett unikt id :e

cya,
PatrikB

------------------
'## -- second place is the first looser -- ##'

Medlem sedan feb. 20001 590 inlägg
#34

Återigen, räknaren behövs inte. Man kan ta bort alldeles utmärkt utan det.
När man tar bort tex. en skådespelare ur relationstabellen, så plockar man bort den skådespelarens unika id ur relationstabellen, för den aktuella filmesn unika id.

LarsG's tabeller är perfekta enligt normaliseringsreglerne, hade inte gjort det bättre själv... :)

/T

------------------
Jensen Ambassadör, mitt bästa köp! www.jensen.no

[Redigerat av Toonster den 18 dec 2001]

Medlem sedan mars 20002 836 inlägg
#35

Men för editering av ngn info i relationstabellen så blir det mindre att hålla reda på :e

cya,
PatrikB

------------------
'## -- second place is the first looser -- ##'

Medlem sedan feb. 20001 590 inlägg
#36

Nej, relationstabellen kan man ändra/reigera precis lika bra ändå!
Finns inget som helst behov av unika poster i en relationstabell.
/T

------------------
Jensen Ambassadör, mitt bästa köp! www.jensen.no

264 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)