---
title: "Jag behöver en funktion..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/13265-jag-behöver-en-funktion/page2"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "timedia"
published: "2001-11-17T14:15:00.000Z"
updated: "2001-12-19T08:27:00.000Z"
replies: 35
views: 546
page: 2
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/13265-jag-behöver-en-funktion"
---

# Jag behöver en funktion...

_Sida 2 av 2._

## #21 — LarsG, 2001-12-14T20:08Z

> 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.

Permalänk: https://www.webforum.nu/p/301141

## #22 — solbulle, 2001-12-14T22:27Z

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...)

Permalänk: https://www.webforum.nu/p/301142

## #23 — LarsG, 2001-12-14T22:44Z

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?

Permalänk: https://www.webforum.nu/p/301143

## #24 — solbulle, 2001-12-15T15:50Z

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)

Permalänk: https://www.webforum.nu/p/301144

## #25 — LarsG, 2001-12-15T17:07Z

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.

Permalänk: https://www.webforum.nu/p/301145

## #26 — solbulle, 2001-12-15T20:50Z

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.

Permalänk: https://www.webforum.nu/p/301146

## #27 — LarsG, 2001-12-15T21:07Z

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.;))

Permalänk: https://www.webforum.nu/p/301147

## #28 — solbulle, 2001-12-16T00:01Z

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.

Permalänk: https://www.webforum.nu/p/301148

## #29 — emission, 2001-12-16T00:21Z

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 &""
```

Permalänk: https://www.webforum.nu/p/301149

## #30 — solbulle, 2001-12-16T00:28Z

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

???

Permalänk: https://www.webforum.nu/p/301150

## #31 — LarsG, 2001-12-16T00:31Z

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
```

Permalänk: https://www.webforum.nu/p/301151

## #32 — solbulle, 2001-12-16T00:36Z

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

TACK TACK TACK!

(btw Bor ni två här? ;) )

Permalänk: https://www.webforum.nu/p/301152

## #33 — PatrikB, 2001-12-18T14:04Z

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

Permalänk: https://www.webforum.nu/p/301153

## #34 — Toonster, 2001-12-18T15:49Z

Å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

Permalänk: https://www.webforum.nu/p/301154

## #35 — PatrikB, 2001-12-18T15:53Z

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

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/301155

## #36 — Toonster, 2001-12-19T08:27Z

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

Permalänk: https://www.webforum.nu/p/301156

---

Tråden på webben: https://www.webforum.nu/amne/asp/13265-jag-behöver-en-funktion/page2  
Föregående sida: https://www.webforum.nu/amne/asp/13265-jag-behöver-en-funktion.md
