Dd@leMedlem sedan juni 2001329 inlägg Tjena!
Har en fråga angående hur jag ska skriva koden för att få ut rätt information ur en databas. Såhär ser det ut nu:
- huvudsidan
här kan man läsa de tre senaste nyheterna, i en förkortad version, om man trycker på en länk så kommer man till "nyhetssidan" där man kan läsa nyheten i sin helhet och också eventuella kommentarer till denna. detta sköter jag med hjälp av en querystring för att få fram.
- nyhetssidan
i menyn så kan man klicka på en länk som heter "nyhetsarkiv" då kommer man till en sida där jag plockar ut den senaste nyheten från databasen.
Men nu till mitt problem, hur ska jag skriva för att få ut eventuella kommentarer på den nyheten som är "nyast" när man går direkt till nyhetssidan. Då finns där ju nämligen ingen querystring som jag kan använda mig av för att plocka ut de kommentarer som hör till nyheten. Det fungerar ju inte heller att ur kommentardatabasen plocka ut den som har högst id (nyast) eftersom det kan ju vara den näst nyaste nyheten som fått kommentar, och på så sätt är högst bland kommentarerna..
Hmm... hoppas ni förstår hur jag menar ;) Om inte kan ni ju alltid kolla på [link]http://www.eddebrant.net/test/\[/link\] Någon kanske till och med har lösningen på detta?
Hej!
LLarsGMedlem sedan dec. 200012 464 inlägg select * from news left join comments on news.id = comments.newsid where news.id in (select max(id) from news)
Nu vet jag inte hur dina tabeller ser ut, men jag antar att du har en räknare (news.id) för att identifiera nyheter.
Dd@leMedlem sedan juni 2001329 inlägg Hmm, vet inte riktigt hur jag ska sätta in din kodsnutt ;q, men den som jag har nu är följande (för att få fram rätt kommentarer när jag klickar på en nyhet från förstasidan)
dim kommentarer_nyhet
kommentarer_nyhet = Request.Querystring("nyhet")
sSQL = "SELECT * FROM kommentera WHERE nyhet_id LIKE '" & kommentarer_nyhet & "' order by dag desc"
provade med
sSQL = "select * from nyheterna left join kommentera on nyhet_id = kommentera.nyhet_id where nyhet_id in (select max(id) from nyheterna)"
men det fungerade inte, värt att säga är att jag kör med access. och att jag har en databas nyheterna_databasen.mdb samt två fält i den, nyheterna och kommentera.
LLarsGMedlem sedan dec. 200012 464 inlägg Vilka kolumner finns i tabellerna?
Av dina exempel att döma ser det ut så här
Nyheterna
----
nyhet_id
...
kommenterar
----------------
kommenterer_nyhet
dag
...
och att det är kommentarer_nyhet som är kopplat till nyhet_id i nyheterna. (Rätta mig om jag har fel.) I så fall borde frågan se ut så här
sSQL = "select * from nyheterna as n left join kommentera as k" &_
" on n.nyhet_id = k.kommentarer_nyhet where n.nyhet_id in (select max(nyhet_id) from nyheterna)"
Dd@leMedlem sedan juni 2001329 inlägg Med den kodsnutt du skickade nu så försvann åtminstone felmeddelandet, men ingenting visas förutom, att det inte finns något meddelande, hmm, kanske skrivit någonting fel, hursomhelst, kodsnutten är nu,
sSQL = "select * from nyheterna as n left join kommentera as k" &_
" on n.id = k.nyhet_id where n.id in (select max(id) from nyheterna)"
Är inte särskilt haj på det här med hur databaskopplingarna ska se ut, men så här har jag gjort:
nyheterna
id - räknare (kopplad till nyhet_id)
tid - datum/tid
rubrik - text
dag - datum/tid
texten - pm
kommentera
id - räknare
texten - pm
nyhet_id - tal (kopplad till id på nyheterna)
dag - datum/tid
tid - datum/tid
Går det upp ett ljus? :r Förhoppningsvis ska man lära sig någonting ju mer man håller på :e
LLarsGMedlem sedan dec. 200012 464 inlägg sSQL = "select * from nyheterna as n left join kommentera as k" &_
" on n.id = k.nyhet_id where n.id in (select max(id) from nyheterna)"
Dd@leMedlem sedan juni 2001329 inlägg Någonting är fel, hmm... har jag tänkt fel? :q
<% IF Request.Querystring("nyhet") < "" THEN %>
<%
'***** Skapar Connection-objektet *****'
Set Conn = Server.CreateObject("ADODB.Connection")
'***** Specifierar sökvägen *****'
MdbFilePath = Server.MapPath("db/nyheter_databasen.mdb")
'***** öppnar databasen *****'
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
sSQL = "select * from nyheterna as n left join kommentera as k" &_
" on n.id = k.nyhet_id where n.id in (select max(id) from nyheterna)"
Set rs = Conn.Execute(sSql)
%>
<%else%>
<%
'***** Skapar Connection-objektet *****'
Set Conn = Server.CreateObject("ADODB.Connection")
'***** Specifierar sökvägen *****'
MdbFilePath = Server.MapPath("db/nyheter_databasen.mdb")
'***** öppnar databasen *****'
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
dim kommentarer_nyhet
kommentarer_nyhet = Request.Querystring("nyhet")
sSQL = "SELECT * FROM kommentera WHERE nyhet_id LIKE '" & kommentarer_nyhet & "' order by dag desc"
Set rs = Conn.Execute(sSql)
%>
<% end if %>
<%
If RS.EOF Then
%>
<!-- om ingenting finns i databasen -->
<I>Ingen har skrivit någon kommentar till denna nyheten ännu</i>
<%
else
Do until RS.EOF
%>
<br>
<b><%=rs("dag")%> - <%=rs("tid")%></b>
<br>
<%=rs("texten")%>
<br>
<%
RS.MoveNext
loop
End If
%>
<%
rs.Close
Set rs = Nothing
%>
<%
Conn.Close
Set Conn = Nothing
%>
SsolbulleMedlem sedan mars 20015 287 inlägg När får kommentarer_nyhet sitt värde?
Dd@leMedlem sedan juni 2001329 inlägg Hur menar du? Det här?
dim kommentarer_nyhet
kommentarer_nyhet = Request.Querystring("nyhet")
Annars så kommer "nyhets" värdet från första sidan, som du kanske läste i mitt tidigare inlägg? Alltså när man går från första sidan och väljer en nyhet så får man fram kommentarerna. Men om man går direkt till "nyhetssidan" så fungerar det inte, då visas bara: "Ingen har kommenterat detta ännu" _trots_ att det finns kommentarer till nyheten.
SsolbulleMedlem sedan mars 20015 287 inlägg Glöm mig, ser ju med fötterna...
Dd@leMedlem sedan juni 2001329 inlägg LLarsGMedlem sedan dec. 200012 464 inlägg Ditt villkor på första raden borde nog vara
<% IF Request.Querystring("nyhet") = "" THEN %>
kan du skriva ut den sql-sats du utför och testa den direkt i Access?
<% end if %>
<% response.write "sql:" & sSql & "<br>" %>
<%
If RS.EOF Then
Dd@leMedlem sedan juni 2001329 inlägg kanon, funkar perfekt nu, f*nken vad jag tycker det är retfullt när det är ett sånt simpelt fel som förstör allting.. men fy skam den som ger sig, tack för hjälpen LarsG iaf :e