/ 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
Problem med inner.join
Fra : Michael Poulsen


Dato : 07-01-02 15:34

Hej
Jeg har lavet et online shop men har lidt problemer med den
sidste del.
Det skal være muligt for kunden at se sine tidligere ordre.
Disse ligger i en tabel for sig selv (ordredetaljer)- hvor b.la.
antal og produktid befinder sig.

Jeg har bare et problem med at få hentet produktbeskrivelsen fra
produkttabellen..

Siden ser ud som følgende:

<% ordreid = request.querystring("ordreid") %>

<%
Set Con = Server.CreateObject("ADODB.Connection")
Con.Open
"Driver={MySQL};DATABASE=xxxxxxx;SERVER=xxx.xxx.xxx.xxx;PORT=xxxx
;UID=xx;PWD=xx;"


Set objRs= Server.CreateObject("ADODB.Recordset")
SQL = "Select * FROM ordredetaljer where orderid = " &
request.querystring("ordreid")
objRs.Open SQL, Con

Set Rs= Server.CreateObject("ADODB.Recordset")
SQL = "Select * FROM produkter where produktid = " &
objRS("produktid")
Rs.Open SQL, Con


%>

<table width="500" cellspacing="0">
<tr>
<td width="288">Varebeskrivelse</td>
<td width="78">Antal </td>
<td width="126">Pris pr. stk</td>
</tr>
</table>
<% Do until RS.EOF%>
<table width="500" cellspacing="0">
<tr>
<td width="289"> <font face="Verdana, Arial, Helvetica,
sans-serif" size="2">
<% = RS("navn") %>
</font> </td>
<td width="77">&nbsp; </td>
<td width="126">&nbsp; </td>
</tr>
</table>
<%
rs.MoveNext
Loop
%>

Det virker egentligt ok men den skriver kun den første vare ???

Håber på lidt hjælp

hilsen

Michael

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

 
 
Jesper Stocholm (07-01-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 07-01-02 15:46

Michael Poulsen wrote in news:a1cbjs$mdp$1@sunsite.dk:

> Hej
> Jeg har lavet et online shop men har lidt problemer med den
> sidste del.
> Det skal være muligt for kunden at se sine tidligere ordre.
> Disse ligger i en tabel for sig selv (ordredetaljer)- hvor b.la.
> antal og produktid befinder sig.
>
> Jeg har bare et problem med at få hentet produktbeskrivelsen fra
> produkttabellen..
>
> Siden ser ud som følgende:
>
> Set objRs= Server.CreateObject("ADODB.Recordset")
> SQL = "Select * FROM ordredetaljer where orderid = " &
> request.querystring("ordreid")
> objRs.Open SQL, Con
>
> Set Rs= Server.CreateObject("ADODB.Recordset")
> SQL = "Select * FROM produkter where produktid = " &
> objRS("produktid")
> Rs.Open SQL, Con
>
[snip]

> Det virker egentligt ok men den skriver kun den første vare ???
>

det er behaviour by design. Du kan ikke pege på et helt recordset med
objRSD("SOMEfield"). Hvis du gør det, så peger du kun på den første
række. Det du gerne vil lave er sikkert

SELECT * FROM produkter where produktid IN (select produktid from
ordredetaljer where ordreid = ##)

Jeg er dog ikke sikker på, at mySQL undertøtter denne anvendelse af
sub-selects, men prøv at se, om det ikke hjælper dig :)

--
Jesper Stocholm - http://stocholm.dk

Gad vide hvor lang tid der går, inden danskerne
finder ud af, at de har købt katten i sækken til valget ...

Jesper Stocholm (07-01-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 07-01-02 15:56

Jesper Stocholm wrote in news:Xns918FA0340309Aspamstocholmdk@192.38.208.81:

>
> SELECT * FROM produkter where produktid IN (select produktid from
> ordredetaljer where ordreid = ##)
>
> Jeg er dog ikke sikker på, at mySQL undertøtter denne anvendelse af
> sub-selects, men prøv at se, om det ikke hjælper dig :)
>

det kan jeg så fortælle dig, at det ikke gør :( Jeg prøvede det lige på min
egen mySQL.

Jeg er desværre på vej ud af døren, så jeg kan ikke give dig den endelige
løsning, men umiddelbart kan du prøve:

SELECT
p.produktID,p.produktnavn,p.produktpris,o.ordreid
FROM
(produkter p
INNER JOIN
ordredetaljer o
ON
p.produktid = o.produktid)
WHERE o.ordreid = ##

.... det er i hvert fald sådan man laver en INNER JOIN :)

--
Jesper Stocholm - http://stocholm.dk

Gad vide hvor lang tid der går, inden danskerne
finder ud af, at de har købt katten i sækken til valget ...

Michael Poulsen (07-01-2002)
Kommentar
Fra : Michael Poulsen


Dato : 07-01-02 15:57

Hej Jesper

Det virker desværre ikke - men tak for budet...

Hilsen

Michael


Jesper Stocholm wrote in dk.edb.internet.webdesign.serverside.asp:
> Michael Poulsen wrote in news:a1cbjs$mdp$1@sunsite.dk:
>
> > Hej
> > Jeg har lavet et online shop men har lidt problemer med den
> > sidste del.
> > Det skal være muligt for kunden at se sine tidligere ordre.
> > Disse ligger i en tabel for sig selv (ordredetaljer)- hvor b.la.
> > antal og produktid befinder sig.
> >
> > Jeg har bare et problem med at få hentet produktbeskrivelsen fra
> > produkttabellen..
> >
> > Siden ser ud som følgende:
> >
> > Set objRs= Server.CreateObject("ADODB.Recordset")
> > SQL = "Select * FROM ordredetaljer where orderid = " &
> > request.querystring("ordreid")
> > objRs.Open SQL, Con
> >
> > Set Rs= Server.CreateObject("ADODB.Recordset")
> > SQL = "Select * FROM produkter where produktid = " &
> > objRS("produktid")
> > Rs.Open SQL, Con
> >
> [snip]
>
> > Det virker egentligt ok men den skriver kun den første vare ???
> >
>
> det er behaviour by design. Du kan ikke pege på et helt recordset med
> objRSD("SOMEfield"). Hvis du gør det, så peger du kun på den første
> række. Det du gerne vil lave er sikkert
>
> SELECT * FROM produkter where produktid IN (select produktid from
> ordredetaljer where ordreid = ##)
>
> Jeg er dog ikke sikker på, at mySQL undertøtter denne anvendelse af
> sub-selects, men prøv at se, om det ikke hjælper dig :)
>
> --
> Jesper Stocholm - http://stocholm.dk
>
> Gad vide hvor lang tid der går, inden danskerne
> finder ud af, at de har købt katten i sækken til valget ...


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

Jesper Stocholm (07-01-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 07-01-02 16:04

Michael Poulsen wrote in news:a1cd05$rk5$1@sunsite.dk:

> Hej Jesper
>
> Det virker desværre ikke - men tak for budet...
>

har du prøvet versionen med INNER JOIN ?


--
Jesper Stocholm - http://stocholm.dk

Gad vide hvor lang tid der går, inden danskerne
finder ud af, at de har købt katten i sækken til valget ...

Anders Lund (07-01-2002)
Kommentar
Fra : Anders Lund


Dato : 07-01-02 16:26


Michael Poulsen <fraiser3@hotmail.com> skrev i en
nyhedsmeddelelse:a1cbjs$mdp$1@sunsite.dk...
> Hej
> Jeg har lavet et online shop men har lidt problemer med den
> sidste del.
Det kunne være at du skulle lære noget mere asp før du hopper ud i en sådan
opgave.

> Det skal være muligt for kunden at se sine tidligere ordre.
> Disse ligger i en tabel for sig selv (ordredetaljer)- hvor b.la.
> antal og produktid befinder sig.
Det gør min sql streng nedenunder.


> Jeg har bare et problem med at få hentet produktbeskrivelsen fra
> produkttabellen..
Enlig en let detalie

> Siden ser ud som følgende:
>
> <% ordreid = request.querystring("ordreid") %>
>
> <%
> Set Con = Server.CreateObject("ADODB.Connection")
> Con.Open
> "Driver={MySQL};DATABASE=xxxxxxx;SERVER=xxx.xxx.xxx.xxx;PORT=xxxx
> ;UID=xx;PWD=xx;"
Indtil vidre fint nok.

>
> Set objRs= Server.CreateObject("ADODB.Recordset")
> SQL = "Select * FROM ordredetaljer where orderid = " &
> request.querystring("ordreid")
> objRs.Open SQL, Con
Her går det så galt første gang, "*" (stjernen) Er FARLIG! du må kun bruge
stjernen hvis du virkelig skal bruge ALLE felter.

> Set Rs= Server.CreateObject("ADODB.Recordset")
> SQL = "Select * FROM produkter where produktid = " &
> objRS("produktid")
> Rs.Open SQL, Con
Du bruger alså en helt nyt recordset bare for at hente beskrivelsen. Der kan
du ellers let ordne med en simpel JOIN.
Prøv istedet med:

Set Rs= Server.CreateObject("ADODB.Recordset")
SQL = "Select produkter.navn From produkter, ordredetaljer Where
ordredetaljer.produktid = produkter.produktid AND ordredetaljer.orderid = "
& ordreid
Rs.Open SQL, Con






-Snip-
Kode der burde virke


> Det virker egentligt ok men den skriver kun den første vare ???
Hvis den nu stadig gør det, så er det fordi din database er designet
forkert. Jeg kan kun anbefale at du lærer noget mere SQL hvis du regner at
med at bruge asp i fremtiden.


Mvh
Anders Lund



Jesper Stocholm (07-01-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 07-01-02 16:40

Anders Lund wrote in
news:3c39be2d$0$62883$edfadb0f@dspool01.news.tele.dk:

>
> Michael Poulsen <fraiser3@hotmail.com> skrev i en
> nyhedsmeddelelse:a1cbjs$mdp$1@sunsite.dk...
>> Hej
>> Jeg har lavet et online shop men har lidt problemer med den sidste
>> del.
> Det kunne være at du skulle lære noget mere asp før du hopper ud i en
> sådan opgave.
>

lad nu være med at overfalde manden ... :|

>>
>> Set objRs= Server.CreateObject("ADODB.Recordset")
>> SQL = "Select * FROM ordredetaljer where orderid = " &
>> request.querystring("ordreid") objRs.Open SQL, Con
> Her går det så galt første gang, "*" (stjernen) Er FARLIG! du må kun
> bruge stjernen hvis du virkelig skal bruge ALLE felter.
>

husk på, at sandhed er en difus størrelse :)

Man kan jo prøve at forklare, hvorfor den er farlig/usmart at bruge - i
stedet for blot at postulere det.

Ulemper ved *-anvendelse:

1.
Du risikerer at få _alt_ for mange kolonner med i dit udtræk. Specielt hvis
du har felter af typen MEMO/TEXT/LONGTEXT/OLE/BLOB etc, så kan dit udtræk
blive uforholdsmæssigt stort :)

2.
Du mister overblikket i koden over, hvilke ting der udtrækkes fra din tabel.
Hvis man specificerer de kolonner man gerne vil udtrække, så kan man direkte
i koden se, hvilke data der ligger i hvilke recordsets - og skal ikke have
hevet databasen frem for at se, hvad der er hentet via *-angivelsen.

>
>> Det virker egentligt ok men den skriver kun den første vare ???
> Hvis den nu stadig gør det, så er det fordi din database er designet
> forkert. Jeg kan kun anbefale at du lærer noget mere SQL hvis du regner
> at med at bruge asp i fremtiden.
>

jaja ... men mon ikke det kommer ?

Til Michael: spørgsmål om databasedesign og sql er som skabt til
nyhedsgruppen dk.edb.database :)

--
Jesper Stocholm - http://stocholm.dk

Gad vide hvor lang tid der går, inden danskerne
finder ud af, at de har købt katten i sækken til valget ...

Michael Poulsen (08-01-2002)
Kommentar
Fra : Michael Poulsen


Dato : 08-01-02 08:01

Hej Jesper

Specielt tak for dit svar


Jesper Stocholm wrote in dk.edb.internet.webdesign.serverside.asp:
> Anders Lund wrote in
> news:3c39be2d$0$62883$edfadb0f@dspool01.news.tele.dk:
>
> >
> > Michael Poulsen <fraiser3@hotmail.com> skrev i en
> > nyhedsmeddelelse:a1cbjs$mdp$1@sunsite.dk...
> >> Hej
> >> Jeg har lavet et online shop men har lidt problemer med den sidste
> >> del.
> > Det kunne være at du skulle lære noget mere asp før du hopper ud i en
> > sådan opgave.
> >
>
> lad nu være med at overfalde manden ... :
>
> >>
> >> Set objRs= Server.CreateObject("ADODB.Recordset")
> >> SQL = "Select * FROM ordredetaljer where orderid = " &
> >> request.querystring("ordreid") objRs.Open SQL, Con
> > Her går det så galt første gang, "*" (stjernen) Er FARLIG! du må kun
> > bruge stjernen hvis du virkelig skal bruge ALLE felter.
> >
>
> husk på, at sandhed er en difus størrelse :)
>
> Man kan jo prøve at forklare, hvorfor den er farlig/usmart at bruge - i
> stedet for blot at postulere det.
>
> Ulemper ved *-anvendelse:
>
> 1.
> Du risikerer at få _alt_ for mange kolonner med i dit udtræk. Specielt hvis
> du har felter af typen MEMO/TEXT/LONGTEXT/OLE/BLOB etc, så kan dit udtræk
> blive uforholdsmæssigt stort :)
>
> 2.
> Du mister overblikket i koden over, hvilke ting der udtrækkes fra din tabel.
> Hvis man specificerer de kolonner man gerne vil udtrække, så kan man direkte
> i koden se, hvilke data der ligger i hvilke recordsets - og skal ikke have
> hevet databasen frem for at se, hvad der er hentet via *-angivelsen.
>
> >
> >> Det virker egentligt ok men den skriver kun den første vare ???
> > Hvis den nu stadig gør det, så er det fordi din database er designet
> > forkert. Jeg kan kun anbefale at du lærer noget mere SQL hvis du regner
> > at med at bruge asp i fremtiden.
> >
>
> jaja ... men mon ikke det kommer ?
>
> Til Michael: spørgsmål om databasedesign og sql er som skabt til
> nyhedsgruppen dk.edb.database :)
>
> --
> Jesper Stocholm - http://stocholm.dk
>
> Gad vide hvor lang tid der går, inden danskerne
> finder ud af, at de har købt katten i sækken til valget ...


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

Michael Poulsen (08-01-2002)
Kommentar
Fra : Michael Poulsen


Dato : 08-01-02 08:18

Hej Igen

Der skal self også lyde en tak til Anders ( trods en hård medfart )

da det virkede

tak


Anders Lund wrote in dk.edb.internet.webdesign.serverside.asp:
> Michael Poulsen <fraiser3@hotmail.com> skrev i en
> nyhedsmeddelelse:a1cbjs$mdp$1@sunsite.dk...
> > Hej
> > Jeg har lavet et online shop men har lidt problemer med den
> > sidste del.
> Det kunne være at du skulle lære noget mere asp før du hopper ud i en sådan
> opgave.
>
> > Det skal være muligt for kunden at se sine tidligere ordre.
> > Disse ligger i en tabel for sig selv (ordredetaljer)- hvor b.la.
> > antal og produktid befinder sig.
> Det gør min sql streng nedenunder.
>
>
> > Jeg har bare et problem med at få hentet produktbeskrivelsen fra
> > produkttabellen..
> Enlig en let detalie
>
> > Siden ser ud som følgende:
> >
> > <% ordreid = request.querystring("ordreid") %>
> >
> > <%
> > Set Con = Server.CreateObject("ADODB.Connection")
> > Con.Open
> > "Driver={MySQL};DATABASE=xxxxxxx;SERVER=xxx.xxx.xxx.xxx;PORT=xxxx
> > ;UID=xx;PWD=xx;"
> Indtil vidre fint nok.
>
> >
> > Set objRs= Server.CreateObject("ADODB.Recordset")
> > SQL = "Select * FROM ordredetaljer where orderid = " &
> > request.querystring("ordreid")
> > objRs.Open SQL, Con
> Her går det så galt første gang, "*" (stjernen) Er FARLIG! du må kun bruge
> stjernen hvis du virkelig skal bruge ALLE felter.
>
> > Set Rs= Server.CreateObject("ADODB.Recordset")
> > SQL = "Select * FROM produkter where produktid = " &
> > objRS("produktid")
> > Rs.Open SQL, Con
> Du bruger alså en helt nyt recordset bare for at hente beskrivelsen. Der kan
> du ellers let ordne med en simpel JOIN.
> Prøv istedet med:
>
> Set Rs= Server.CreateObject("ADODB.Recordset")
> SQL = "Select produkter.navn From produkter, ordredetaljer Where
> ordredetaljer.produktid = produkter.produktid AND ordredetaljer.orderid = "
> & ordreid
> Rs.Open SQL, Con
>
>
>
>
>
>
> -Snip-
> Kode der burde virke
>
>
> > Det virker egentligt ok men den skriver kun den første vare ???
> Hvis den nu stadig gør det, så er det fordi din database er designet
> forkert. Jeg kan kun anbefale at du lærer noget mere SQL hvis du regner at
> med at bruge asp i fremtiden.
>
>
> Mvh
> Anders Lund
>
>


--
Vil du lære at kode HTML, XHTML, CSS, SSI eller ASP ???
- 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 : 177506
Tips : 31968
Nyheder : 719565
Indlæg : 6408562
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste