Avatar billede Karalumpas Praktikant
01. oktober 2004 - 01:02 Der er 5 kommentarer og
1 løsning

Select og count

Hejsa
Jeg skal bruge lidt hjælp med nedenståene kode
Jeg skal have den til at udskrive nyhederne fra news tabellen i  databasen og samtidig tælle antal kommentarer fra kommentar tabellen til hver nyhed.
Den udskriver slet ingen poster. Skal man flette det sammen til en sætning eller hvordan gør man her? Eller er det et andet sted problemet ligger?

countSQL = "SELECT Count(kommentar.news_id) as antal FROM kommentar INNER JOIN news ON kommentar.news_id = news.id group by kommentar.news_id"

selectnewskat = Request.QueryString("newskat")
if selectnewskat = "pct" then
sql ="Select * from news where newskat in ('pct','alle') order by dato desc Limit 0,"& antalnews & ""
elseif selectnewskat = "lasercut" then
sql ="Select * from news where newskat in ('lasercut','alle') order by dato desc Limit 0,"& antalnews & ""
else
sql ="Select * from news order by dato desc Limit 0,"& antalnews & ""

End if
Set rs = Conn.Execute(sql)
Set countRs = Conn.Execute(countSQL)
If countRs("antal") = "" then
countRs("antal") = "Ingen"
End if
Avatar billede Karalumpas Praktikant
01. oktober 2004 - 05:46 #1
Jeg er nu nået så langt at den godt vil vise posterne men kun hvis der er tilknyttet en kommentar til nyheden. Hvordan kan det være?
Avatar billede fennec Nybegynder
01. oktober 2004 - 08:14 #2
Det kunne virke som om du skal bruge LEFT JOIN.

countSQL = "SELECT Count(kommentar.news_id) as antal FROM news LEFT JOIN kommentar ON news.id = kommentar.news_id group by kommentar.news_id"
Avatar billede Karalumpas Praktikant
01. oktober 2004 - 14:27 #3
Jeg afprøver det lige når jeg kommer tilbage på min pind :-)
Avatar billede Karalumpas Praktikant
02. oktober 2004 - 02:43 #4
Det virker stadig ikke.. Min kode ser således ud:

<%
Dim selectnewskat
Dim newskat
Dim antalnews
If Request.Cookies("user")("antalnews") = 0 then
antalnews = 5
else
antalnews = Request.Cookies("user")("antalnews")
End if

countSQL = "SELECT Count(news_id) as antal FROM kommentar Left outer JOIN news ON kommentar.news_id = news.id group by kommentar.news_id"
Set countRs = Conn.Execute(countSQL)
If countRs("antal") = "" then
countRs("antal") = "Ingen"
End if

selectnewskat = Request.QueryString("newskat")
if selectnewskat = "pct" then
sql ="Select * from news,kommentar where newskat in ('pct','alle') order by dato desc Limit 0,"& antalnews & ""
elseif selectnewskat = "lasercut" then
sql ="Select * from news,kommentar where newskat in ('lasercut','alle') order by dato desc Limit 0,"& antalnews & ""
else
sql ="Select * from news,kommentar order by dato desc Limit 0,"& antalnews & ""

End if
Set rs = Conn.Execute(sql)



%>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td><img src="../images/smalltable_03.jpg" width="15" height="19"></td>
    <td width="100%" bgcolor="#C7C8D6" align="right"><a href="news/opret_nyhed.asp" target="_self">Opret nyhed</a>&nbsp;-&nbsp;<a href="?newskat=alle" target="_self">Alle
      nyheder</a>&nbsp;-&nbsp;<a href="?newskat=pct" target="_self">pct</a>&nbsp;-&nbsp;<a href="?newskat=lasercut" target="_self">Lasercut</a></td>
    <td><img src="../images/smalltable_05.jpg" width="15" height="19"></td>
  </tr>
  <%

intCount = 0

Do While not rs.EOF and countRs.EOF

  If intCount = 0 Then
      strColor = "#ffffff"
      intCount = 1
  ElseIf intCount = 1 Then
      strColor = "#E7E7F1"
      intCount = 0
  End If

inputStr = rs("indhold")
MAX_WORD_COUNT = 200
wordCount = 0
newArr = split(inputStr," ")
outputStr = ""
do while (wordCount < UBOUND(newArr)) AND (wordCount < MAX_WORD_COUNT)
  outputStr = outputStr & newArr(wordCount) & " "
  wordCount = wordCount + 1
loop


%>
<tr>
<td width=15 colspan=0 class=tableleft rowspan=0>&nbsp;</td><td rowspan=0 bgcolor="<%=strColor%>"><table width=100% border=0 cellspacing=0 cellpadding=0><tr><td width=450><div class="overskrift_table"><%= rs("overskrift") %></div><div class=brodtekst><%= outputStr %>...<br><br><a href="news/visnyhed.asp?id="<%= rs("id") %>" target="_self">Læs hele tråden...</a></div><br></td><td valign="bottom"><a href="news/visnyhed.asp?id="<%=rs("id")%>"><div class="brodtekst2"><%= countRs %> kommentarer</a><br>Oprettet af:&nbsp;"<%= rs("initialer") %>&nbsp;d.<%= rs("dato") %>&nbsp;Kategori: <%= rs("newskat") %></td></tr></table>
</div></td>
<td width=15 colspan=0 class=tableright rowspan=0>&nbsp;</td></tr>
<%
countRs.MoveNext()
loop
rs.MoveNext()
loop
%>
  <tr>
    <td class="tableleft">&nbsp;</td>
    <td>&nbsp;</td>
    <td class="tableright">&nbsp;</td>
  </tr>
  <tr>
    <td height="7" bgcolor="#C7C8D6"></td>
    <td height="7" bgcolor="#C7C8D6"></td>
    <td height="7" bgcolor="#C7C8D6"></td>
  </tr>
</table>

Den vil stadig ikke udskrive de nyheder som ikke har tilknyttet en kommentar. Håber du har lyst til lige at kigge det igennem :)
Avatar billede fennec Nybegynder
04. oktober 2004 - 08:15 #5
For det første skal du have byttet om på tabellerne i din select. Det er ikke uvæsenligt, hvordan de står, når du bruger LEFT JOIN. Også tror jeg nok også at group by skal være anderledes.

countSQL = "SELECT Count(kommentar.news_id) as antal FROM news LEFT JOIN kommentar ON news.id = kommentar.news_id group by news_id"
Avatar billede Karalumpas Praktikant
04. november 2004 - 02:45 #6
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester