Avatar billede litop Nybegynder
07. oktober 2004 - 09:51 Der er 14 kommentarer og
1 løsning

List 5 poster fra db

Hey!!!!

Har tidligere fået lavet dette script.

KODE:
<%
Set con= Server.CreateObject("ADODB.connection")
    Provider = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("forum/admin/database/wwForum.mdb")
    con.Open Provider

SqlStr = "SELECT tblForum.hide, * FROM tblForum RIGHT JOIN tblTopic ON tblForum.forum_id = tblTopic.forum_ID WHERE (((tblTopic.Topic_ID) In (Select top 5 Topic_ID From tblThread order by thread_ID DESC)) AND ((tblForum.hide)=False))order by tblTopic.Last_entry_date DESC;"
Set rs = con.Execute(SqlStr)


    rs.MoveFirst
do while not rs.eof
  forumdate = rs("Last_entry_date")
  If DateDiff("d", date(), rs("Last_entry_date")) = 0 Then
    strStyle = "font-weight: bold;"
  Else
    strStyle = ""
  End If
  Response.Write("<span style=""" & strStyle & """>" & left(right(rs("Last_entry_date"),8),5) & "</span>")
    %>
  <br>
  <a href="forum/forum_posts.asp?TID=<%=rs("Topic_ID")%>" target="_blank"><%=rs("subject")%></a><br><br>
<%
  rs.movenext
loop
%>

Scriptet virker fint, ingen fejl - men desværre ikke helt efter hensigten.

Problemet er at den henter de 5 nyeste indlæg - Men det kan sagtens være under samme spørgsmål.

Så derfor skrifter listen hele tiden mellem at den lister 5 poster og at den lister 1.

Kan I hjælpe, så den springer posten over, hvis den allerede er nævnt, eller noget i den stil :o)

</LiToP>
Avatar billede eagleeye Praktikant
07. oktober 2004 - 09:54 #1
Så prøv at sætte distinct ind samme med top 5:

(Select top 5 distinct Topic_ID From tblThread order by thread_ID DESC)

Eller er det omvendt:

(Select distinct top 5 Topic_ID From tblThread order by thread_ID DESC)
Avatar billede michael_stim Ekspert
07. oktober 2004 - 09:54 #2
SqlStr = "SELECT tblForum.hide, * FROM tblForum RIGHT JOIN tblTopic ON tblForum.forum_id = tblTopic.forum_ID WHERE (((tblTopic.Topic_ID) In (Select DISTINCT top 5 Topic_ID From tblThread order by thread_ID DESC)) AND ((tblForum.hide)=False))order by tblTopic.Last_entry_date DESC;"
Avatar billede litop Nybegynder
07. oktober 2004 - 10:23 #3
Microsoft JET Database Engine error '80004005'

ORDER BY clause (thread_ID) conflicts with DISTINCT.

site.asp, line 10

SqlStr = "SELECT tblForum.hide, * FROM tblForum RIGHT JOIN tblTopic ON tblForum.forum_id = tblTopic.forum_ID WHERE (((tblTopic.Topic_ID) In (Select distinct top 5 Topic_ID From tblThread order by thread_ID DESC)) AND ((tblForum.hide)=False))order by tblTopic.Last_entry_date DESC;"
Set rs = con.Execute(SqlStr)
Avatar billede michael_stim Ekspert
07. oktober 2004 - 10:39 #4
SqlStr = "SELECT tblForum.hide, * FROM tblForum RIGHT JOIN tblTopic ON tblForum.forum_id = tblTopic.forum_ID WHERE (((tblTopic.Topic_ID) In (Select (DISTINCT top 5) Topic_ID From tblThread order by thread_ID DESC)) AND ((tblForum.hide)=False))order by tblTopic.Last_entry_date DESC;"

Hvad med sådan her.
Avatar billede litop Nybegynder
07. oktober 2004 - 10:47 #5
Microsoft JET Database Engine error '80040e14'

Syntax error. in query expression '(((tblTopic.Topic_ID) In (Select (DISTINCT top 5) Topic_ID From tblThread order by thread_ID DESC)) AND ((tblForum.hide)=False))'.

site.asp, line 10
Avatar billede eagleeye Praktikant
07. oktober 2004 - 10:53 #6
du må lave dette:  Select distinct top 5 Topic_ID From tblThread order by thread_ID DESC

sådan her:

select top 5 topic_id from (SELECT max(thread_id) as tmpid,  tblThread.Topic_ID FROM tblThread GROUP BY tblThread.Topic_Id) order by tmpid desc

Så din SQL sætning bliver:

SqlStr = "SELECT tblForum.hide, * FROM tblForum RIGHT JOIN tblTopic ON tblForum.forum_id = tblTopic.forum_ID WHERE (((tblTopic.Topic_ID) In (select top 5 topic_id from (SELECT max(thread_id) as tmpid,  tblThread.Topic_ID FROM tblThread GROUP BY tblThread.Topic_Id) order by tmpid desc)) AND ((tblForum.hide)=False))order by tblTopic.Last_entry_date DESC;"
Avatar billede eagleeye Praktikant
07. oktober 2004 - 10:57 #7
den kan laves om så det er en SQL som også tager top 5:
select topic_id from (SELECT top 5 max(thread_id) as tmpid,  tblThread.Topic_ID FROM tblThread GROUP BY tblThread.Topic_Id order by max(thread_id) desc)


SqlStr = "SELECT tblForum.hide, * FROM tblForum RIGHT JOIN tblTopic ON tblForum.forum_id = tblTopic.forum_ID WHERE (((tblTopic.Topic_ID) In (select topic_id from (SELECT top 5 max(thread_id) as tmpid,  tblThread.Topic_ID FROM tblThread GROUP BY tblThread.Topic_Id order by max(thread_id) desc))) AND ((tblForum.hide)=False))order by tblTopic.Last_entry_date DESC;"
Avatar billede litop Nybegynder
07. oktober 2004 - 11:00 #8
ok - hvad skal jeg indsætte?

con.Open Provider
   
?????
Set rs = con.Execute(SqlStr)
Avatar billede eagleeye Praktikant
07. oktober 2004 - 11:02 #9
Lige som før du skal bare copy/paste SQL sætningen SqlStr. Så det bliver:


SqlStr = "SELECT tblForum.hide, * FROM tblForum RIGHT JOIN tblTopic ON tblForum.forum_id = tblTopic.forum_ID WHERE (((tblTopic.Topic_ID) In (SELECT top 5 Topic_ID FROM tblThread GROUP BY Topic_Id order by max(thread_id) desc)) AND ((tblForum.hide)=False))order by tblTopic.Last_entry_date DESC;"
Set rs = con.Execute(SqlStr)
Avatar billede litop Nybegynder
07. oktober 2004 - 11:02 #10
Hov - nu virker det, men den viser kun 4? Skal jeg bare ændre den til max6 så istedet?
Avatar billede eagleeye Praktikant
07. oktober 2004 - 11:05 #11
Umiddelbart skulle den tage 5 ud, når der står top 5 men prøv at skrive top 6 og se som den tager 5 ud så.
Avatar billede eagleeye Praktikant
07. oktober 2004 - 11:08 #12
det kunne måske være denne som ikke er opflydt på en af topic_id'erne:  tblForum.hide=false
Avatar billede litop Nybegynder
07. oktober 2004 - 11:12 #13
ok - vi holder os til 6 :-)

takker for din hjælp, nu har du også næsten hentet Arne_v ;o)
Avatar billede eagleeye Praktikant
07. oktober 2004 - 11:14 #14
hehe det kommer nok ikke til at ske lige med det første ;)
Avatar billede litop Nybegynder
07. oktober 2004 - 11:15 #15
kun 6000 point :-) GO GO GO!!!
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