/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
left join problematik
Fra : Michael Tillgaard


Dato : 16-10-04 19:22

Beklager det lange indlæg.
Meningen er at en elev får præsenteret bogtitler, som eleven ikke
har besvaret spørgsmål til tidligere. Eleven klikker på et
bogstav og alle titler der starter med det bogstav kommer frem.
Bogtitlerne og spørgsmål ligger i bogspmaal. Elevens resultater i
elevresultat. Bogid findes i både bogspmaal og elevresultat. Alt
dette virker ganske glimrende.
Når jeg henter <%= rs("bogtitel") %> , <%= rs("forfatfornavn") %>
og <%= rs("forfatefternavn") %> ingen problemer, men <%
rs("bogid")%> er tom? Kan nogen gennemskue den?

sql = "SELECT * FROM bogspmaal LEFT JOIN ( SELECT bogid, elevid
FROM elevresultat WHERE elevresultat.elevbrugernavn = '" &
(aktivelev.Fields.Item("Elevbrugernavn").Value) & "' ) AS
Setpostbruger ON bogspmaal.bogid = Setpostbruger.bogid WHERE
Setpostbruger.elevid Is Null AND bogspmaal.aktiv = TRUE AND
left(bogspmaal.bogtitel,1) = '"& u_letter &"' ORDER BY bogtitel"

Denne her virker men her får jeg ikke sorteret de bogtitler fra
som den enkelte elev allerede har besvaret:

sql = "select * from bogspmaal where aktiv = TRUE AND
left(bogspmaal.bogtitel,1)='"& u_letter &"' order by bogtitel
asc"

M.v.h.
Michael

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Michael Tillgaard (16-10-2004)
Kommentar
Fra : Michael Tillgaard


Dato : 16-10-04 23:08

Løste problemet med dreamweaver:
"SELECT * FROM bogspmaal LEFT JOIN ( SELECT bogid, elevid FROM
elevresultat WHERE elevresultat.elevbrugernavn = '" +
Replace(Recordset1__MMColParam, "'", "''") + "' ) AS Setpostbruger
ON bogspmaal.bogid = Setpostbruger.bogid WHERE Setpostbruger.elevid
Is Null AND bogspmaal.aktiv = TRUE AND left(bogspmaal.bogtitel,1) =
'" + Replace(Recordset1__u_letter, "'", "''") + "' ORDER BY
bogtitel asc"
M.v.h.
Michael

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Torben Brandt (16-10-2004)
Kommentar
Fra : Torben Brandt


Dato : 16-10-04 23:25

Michael Tillgaard wrote in dk.edb.internet.webdesign.serverside.asp:
> Løste problemet med dreamweaver:
> "SELECT * FROM bogspmaal LEFT JOIN ( SELECT bogid, elevid FROM
> elevresultat WHERE elevresultat.elevbrugernavn = '" +
> Replace(Recordset1__MMColParam, "'", "''") + "' ) AS Setpostbruger
> ON bogspmaal.bogid = Setpostbruger.bogid WHERE Setpostbruger.elevid
> Is Null AND bogspmaal.aktiv = TRUE AND left(bogspmaal.bogtitel,1) =
> '" + Replace(Recordset1__u_letter, "'", "''") + "' ORDER BY
> bogtitel asc"

Jeg kan ikke se hvad forskellen er på ovenstående og det du prøvede med
først - eller er jeg bare blind..?

Det er selvfølgelig fint hvis det virker, men jeg ser stadig en
uhensigtmæssighed i din forespørgsel, som måske også var grunden til at
det gik galt før:
1) Antag at u_letter er "b" og elevens brugernavn er bruger1. Det gør
det bare nemmere...
2) Du har tabellen bogspmaal:
[der er 3 bøger, og de er alle aktive og titlen starter med b]
---------------------
bogid | bogtitel | aktiv
1 | bog1 | true
2 | bog2 | true
3 | bog3 | true
---------------------
3) Du har den midlertidige tabel setpostbruger:
[brugeren har kun svaret på en bog]
-------------
bogid | elevid
2 | bruger1
-------------
4) Du joiner dem med left join og får derfor en tabel hvor alle
felterne er med. Men læg mærke til at der er to felter der hedder
bogid.
-------------------------------------------------------------
bogspmaal.bogid | bogtitel | aktiv | setpostbruger.bogid | elevid
1 | bog1 | true | null | null
2 | bog2 | true | 2 | bruger1
3 | bog3 | true | null | null
-------------------------------------------------------------
og efter where-sætningen har du tilbage:
-------------------------------------------------------------
bogspmaal.bogid | bogtitel | aktiv | setpostbruger.bogid | elevid
1 | bog1 | true | null | null
3 | bog3 | true | null | null
-------------------------------------------------------------
5) Du referer så med <% rs("bogid") %> til et af felterne, der hedder
bogid. Du har dog ikke angivet om det skal være bogspmaal.bogid eller
setpostbruger.bogid og selv om du skriver at det virker nu, så er jeg
bange for at du bare er heldig...

Jeg vil derfor - generelt - anbefale dig at angive hvilke felter du
trækker ud, i stedet for bare at vælge dem alle. For de første slipper
du for at trække data ud du ikke skal bruge og for det andet så slipper
du måske for at få det problem du havde først.
Altså brug
select felt1, felt2, ...
i stedet for
select * ...
I det konkrete tilfælde ville du aldrig vælge at trække
setpostbruger.bogid ud, og <% rs("bogid") %> kunne så entydigt referere
til bogspmaal.bogid.

mvh Torben

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Michael Tillgaard (17-10-2004)
Kommentar
Fra : Michael Tillgaard


Dato : 17-10-04 12:41

> > Løste problemet med dreamweaver:
> > "SELECT * FROM bogspmaal LEFT JOIN ( SELECT bogid, elevid FROM
> > elevresultat WHERE elevresultat.elevbrugernavn = '" +
> > Replace(Recordset1__MMColParam, "'", "''") + "' ) AS Setpostbruger
> > ON bogspmaal.bogid = Setpostbruger.bogid WHERE Setpostbruger.elevid
> > Is Null AND bogspmaal.aktiv = TRUE AND left(bogspmaal.bogtitel,1) =
> > '" + Replace(Recordset1__u_letter, "'", "''") + "' ORDER BY
> > bogtitel asc"
>
> Jeg kan ikke se hvad forskellen er på ovenstående og det du prøvede med
> først - eller er jeg bare blind..?
>
> Det er selvfølgelig fint hvis det virker, men jeg ser stadig en
> uhensigtmæssighed i din forespørgsel, som måske også var grunden til at
> det gik galt før:
> 1) Antag at u_letter er "b" og elevens brugernavn er bruger1. Det gør
> det bare nemmere...
> 2) Du har tabellen bogspmaal:
> [der er 3 bøger, og de er alle aktive og titlen starter med b]
> ---------------------
> bogid bogtitel aktiv
> 1 bog1 true
> 2 bog2 true
> 3 bog3 true
> ---------------------
> 3) Du har den midlertidige tabel setpostbruger:
> [brugeren har kun svaret på en bog]
> -------------
> bogid elevid
> 2 bruger1
> -------------
> 4) Du joiner dem med left join og får derfor en tabel hvor alle
> felterne er med. Men læg mærke til at der er to felter der hedder
> bogid.
> -------------------------------------------------------------
> bogspmaal.bogid bogtitel aktiv setpostbruger.bogid elevid
> 1 bog1 true null null
> 2 bog2 true 2 bruger1
> 3 bog3 true null null
> -------------------------------------------------------------
> og efter where-sætningen har du tilbage:
> -------------------------------------------------------------
> bogspmaal.bogid bogtitel aktiv setpostbruger.bogid elevid
> 1 bog1 true null null
> 3 bog3 true null null
> -------------------------------------------------------------
> 5) Du referer så med <% rs("bogid") %> til et af felterne, der hedder
> bogid. Du har dog ikke angivet om det skal være bogspmaal.bogid eller
> setpostbruger.bogid og selv om du skriver at det virker nu, så er jeg
> bange for at du bare er heldig...
>
> Jeg vil derfor - generelt - anbefale dig at angive hvilke felter du
> trækker ud, i stedet for bare at vælge dem alle. For de første slipper
> du for at trække data ud du ikke skal bruge og for det andet så slipper
> du måske for at få det problem du havde først.
> Altså brug
> select felt1, felt2, ...
> i stedet for
> select * ...
> I det konkrete tilfælde ville du aldrig vælge at trække
> setpostbruger.bogid ud, og <% rs("bogid") %> kunne så entydigt referere
> til bogspmaal.bogid.
>
> mvh Torben
>
Hej Torben
Tak for din meget fyldige gennemgang, en fornøjelse at læse. Gav mig
faktisk en god forståelse for hvad der egentligt sker. Jeg vil bestemt
afprøve dine anbefalinger.
Der er vel ikke noget galt i at være heldig
Da mine asp evner er begrænsede, må jeg af og til ty (ofte) til
Dreamweaver MX. Ovenstående virker faktisk, dog ikke med <% rs("bogid") %>
men med <%=(Recordset1.Fields.Item("bogspmaal.bogid").Value)%>.
Oprindeligt afprøvede jeg også <% rs("bogspmaal.bogid") %> men fik en
fejlmelding.
M.v.h.
Michael

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408526
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste