webForumDet fria alternativet

Få fram rätt information ur databasen

ASP

13 svar · 344 visningar · startad av d@le

Medlem sedan juni 2001329 inlägg
Frågan#1

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!

Medlem sedan dec. 200012 464 inlägg
#2
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.

Medlem sedan juni 2001329 inlägg
#3

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.

Medlem sedan dec. 200012 464 inlägg
#4

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)"
Medlem sedan juni 2001329 inlägg
#5

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

Medlem sedan dec. 200012 464 inlägg
#6
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)"
Medlem sedan juni 2001329 inlägg
#7

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 
%>
Medlem sedan mars 20015 287 inlägg
#8

När får kommentarer_nyhet sitt värde?

Medlem sedan juni 2001329 inlägg
#9

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.

Medlem sedan mars 20015 287 inlägg
#10

Glöm mig, ser ju med fötterna...

Medlem sedan juni 2001329 inlägg
Medlem sedan juni 2001329 inlägg
#12

ingen?

Medlem sedan dec. 200012 464 inlägg
#13

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
Medlem sedan juni 2001329 inlägg
#14

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

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