[ASP] "Zähler"

mEgA

Grünschnabel
Hallo,

ich bekomm es einfach nicht hin.

Ich habe eine Newssite und eine Commentssite miteinander verbunden so dass nur die Comments zu dem Newspost darstellen (eazy)

aber ich bekomm es nicht hin das mir auf der Newssite angezeigt wird WIEVIELE comments zu diesem Post erstellt worden sind

kann mir wer dabei helfen?

with best regards
mEgA :)

PS: Benutze eine OLEDB-Connection
 
Eigentlich hast Du 2 Möglichkeiten

1.Du legst zum Datensatz Post noch ein Zählerfeld hinzu. Jedesmal, wenn ein neuer Kommentar gesetzt wird, zählst Du das Feld um 1 höher, also Du updatest es mit der ID des Posts in der Update-Where-Bedingung.

2. Ich setze mal voraus, dass Posts und Komments in unterschiedlichen Tabellen liegen. Du stellst eine Beziehung mit dem inner join zwischen beiden her und setzt in der SQL ein zusätzliches Feld mit dem Count auf die ID des Posts. Alle anderen Felder gruppierst Du im Group by.
 
Zuletzt bearbeitet:
Hi

dies liest Dir zwar die Anzahl der Comments aus, aber nicht z.b. die Headline des Posts, im Falle, was auch sinnvoll ist, wenn Post und comments in 2 unterschiedlichen Tabellen gespeichert worden ist.

bsp.

tblPost
idpost|header|iText|
1|Infos zu Autos|Text|
2|infos zum Bauen|text|
...

tblcomments
idcomments|idpost|Kommentartext|
1|1|Text zum Kommentar1|
2|1|Text zum Kommentar1|
3|2|Text zum Kommentar2|
4|2|Text zum Kommentar2|
...

tblPost.idpost und tblcomments.idpost würden in dem Falle in Beziehung stehen.

SQL

select tblPost.header, count(tblcomments.idpost) as Anzahl from tblpost inner join tblcomments on tblPost.idpost=tblcomments.idpost where tblpost.idpost=1 group by tblPost.header

Soll eine bestimmte ID der tblPost abgefragt werden, muss man diese in der Where-Bedingung auslesen (entweder durch eine festen Wert oder einen Wert, der via Variablen übergeben wird), ansonsten den Bedingungspart weglassen, dann hat man die Auflistung aller Posts mit der Anzahl der zugehörigen Comments. Mit dem Top x kann man sich auch eine bestimmte Anzahl der Posts mit Anzahl Comments anzeigen lassen.

Wobei wirklich zu überlegen ist, ob nicht ein schnelles Update mit dem Hinzuzählen von 1 nach jedem eingetragenen Kommentar sinnvoller ist. Dies bedarf nur einem kleinen Feld und bräuchte beim Auslesen keinen Umweg über den Join.
 
hehe habe ich auch ... wie soll es den auch anders gehen?

dann könnt ich nur zu jedem News-Post einen Commentpost machen ... ich habe schon eine Verbindung zwichen meinen Tabellen genauso wie Verbindungen zwichen meinen Download-Section-Tabellen oder der Verbindung bei Login/Member *prall* :) :) :)

Ich wundere mich bei euchen Posts etwas ... der code is so kurz und besteht aus php-elementen in meinen vielen Veruschen kam ich auf diesen Trümmer.

<%
set com = Server.Createobject("ADODB.Connection")
com.open "Server.MapPath("../mdb/df.mdb"")
set com2 = Server.CreateObject("ADODB.RecordSet")
SQLstr = "SELECT [news].[newsID], Count([comments].[commentID]) AS anzahl FROM news LEFT JOIN comments ON [news].[newsID]=[comments].[commentID] GROUP BY [news].[newsID], [comments].[commentID] ORDER BY News.newsID desc"
com2.open SQLstr, com
%>

***** aber auch nicht :p

Bei dieser Methode (Commentanzahl) steh ich wirklich auf dem schlauch

with best regards
mEgA
 
Zuletzt bearbeitet:
Also ich lese den ganzen Newsschnodder aus.
Das ganze pack ich in einen Repeater, lass mir die newsID angeben und schreib eine kurze Function á la

Function GetCommentsAnzahl(NewsID As Integer)

SELECT COUNT(*) As Anzahl FROM newscomments WHERE newsID = NewsID

Return MeineAnzahl

End Function

Feddich :)

Grüsse, Euer caSe
 
Hi Mega

also in meinem Beispiel sind bestimmt keine php-Elemente drin, das schwöre ich ;-) Ferner bezieht sich das Beispiel nur auf das SQL-Statement.

Aber eine Frage:

ist Comments.CommentsID, wo Du im Left Join in on die Daten vergleichst wirklich das Feld, was die Beziehung zwischen News und Comments herstellen soll?

Es muss in Deiner Comments-Tabelle auch ein integer Feld vorhanden sein, wo diese NewsID gespeichert wird. Diese NewsID muss beim Speichern des Kommentars mitgespeichert werden (ist halt die ID des Posts und man braucht sie, um die Beziehung zwischen beiden Tabellen herstellen zu können) und hat aber nichts mit einer aufzählenden ID der Commentstabelle zu tun.

Noch ein Tipp: Wenn Du Access nutzt, kannst Du eine solche Beziehung leicht im Assistenten herstellen. Code kopieren und dann für das Statement nutzen. In einem solchen Fall ist das ohne Komplikationen möglich.

Es gibt viele Möglichkeiten der Realisierung. Dies ist die, die sich auf mein Posting bezieht.
 
hi Leutz,

so sehen mein News-Sys aus:

news-table:
newsID - Autowert
headline
poster
datum
eintrag
linkname
link

comments-table:
commID - Autowert
commentID - Spalte die nach der newsID gefüllt wird
poster
datum
eintrag


ja toll sql davon hab ich keinen plan ... wenn ihr mir volle codes schickt so das ich sie nur noch einsetzen muss wäre mir sehr geholfen.

für nachfolgene Arbeit bedanken wir uns im voraus

with best regards
mEgA
 
Du hast den Code doch schon geschrieben.
Den Code erweiterst Du um die Felder der News-Tabelle, die Du noch dargestellt haben willst. Im Group by gruppierst Du alle die Felder, wo Du keine Aggregatfunktion (Count,sum,max,min,avg) anwendest. Im Order by sortierst Du Deine Felder.

Außerdem schreibst Du immer "es geht nicht" aber beschreibst mit keinem Wort, was nicht geht! Ob Fehlermeldungen kommen, wenn ja, welche etc. Wie bitte schön, soll man dies als Außenstehender wissen? Ich denke, es liegt an der Verbindung. Aber ob der Pfad zur mdb korrekt ist, welche Feldeigenschaften und Formate Deine Felder haben, das kann man ja nicht wissen. CommentID muss z.B. ein Feld vom Type integer sein, wenn es mit NewsID in Beziehung geht.

<%
function GetAnzahlComments()
dim strDatabase
strDatabase = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../mdb/df.mdb") & ";"

dim com
Set com = Server.CreateObject("ADODB.Connection")
com.Open strDatabase


dim SQLStr
SQLstr = "SELECT [news].[newsID], "
SQLstr = SQLstr & "Count([comments].[commentID]) AS anzahl "
SQLstr = SQLstr & "FROM news LEFT JOIN comments "
SQLstr = SQLstr & "ON [news].[newsID]=[comments].[commentID] "
SQLstr = SQLstr & "GROUP BY [news].[newsID] "
SQLstr = SQLstr & "ORDER BY News.newsID desc"

dim rs
set rs = Server.CreateObject("ADODB.RecordSet")
rs.open SQLstr, com

while not rs.eof
dim txt
txt = "NewsID= " & rs(0) & " Anzahl Comments = " & rs(1) & "<br>"
GetAnzahlComments = GetAnzahlComments & txt
rs.movenext
wend

rs.close
set rs=nothing
com.close
set com=nothing
end function

' --- Ausgabe

Response.write GetAnzahlComments()
%>
 
Zurück