webForumDet fria alternativet

Räkna antalet kommentarer

Databaser & SQLur Databashanterare & SQL

6 svar · 352 visningar · startad av peppar

Medlem sedan dec. 2001873 inlägg
Frågan#1

Skall summera antalet kommentarer och skriva ut det värdet till varje post som hämtas med getrows. Kan man göra det direkt i frågan? DB är access. Frågan ser ut såhär:

Set RecSet = Connect.Execute("SELECT dagbok.*, dagkommentarer.* FROM (dagbok LEFT OUTER JOIN dagkommentarer ON dagbok.dagId = dagkommentarer.komOrigin) ORDER BY dagbok.dagId DESC")
Medlem sedan dec. 20003 563 inlägg
#2

Edit: Glöm första svaret :)

"SELECT dagbok.*, (select count(*) from dagkommentarer ts where ts.komOrigin = dagbok.dagId) as antal_kommentarer
FROM dagbok
ORDER BY dagbok.dagId DESC"

Din sql-sats ser lite konstig ut. Du verkar hämta samtliga poster från dagbok samt en kommentar som tillhör denna dagbok. Rätt?

Annars är väl den enklaste lösningen att slänga in en sub-query liknande ovan.

Medlem sedan dec. 2001873 inlägg
#3

Där får jag: Syntaxfel i frågeuttrycket 'count(t2.*)'.

red/ ok , du var för snabb... :)

Medlem sedan dec. 2001873 inlägg
#4

Ok!

Det jag vill göra är att hämta alla poster från tabellen dagbok och hämta alla poster tillhörande varje post i dagbok från dagkommentarer.

och räkna hur många kommentarer det finns till varje post i dagbok.

Medlem sedan dec. 20003 563 inlägg
#5

Ok. Jag utgår från att strukturen inte är identisk mellan ett dagboksinlägg och kommentar iom två tabeller. Det gör att endast en fråga för all information är utesluten.

Min lösning skulle nog vara med två frågor.
Hämta dagboken:

"SELECT dagbok.*, (select count(*) from dagkommentarer ts where ts.komOrigin = dagbok.dagId) as antal_kommentarer
FROM dagbok ORDER BY dagbok.dagId DESC"

Hämta samtliga kommentarer:

select * from dagkommentarer order by komOrigin desc

Om du lägger in båda dessa i varsin array kan du för varje dagboksinlägg sedan stega 'antal_kommentarer'-steg i kommentarsarrayen för att skriva ut relevanta kommentarer. Det här kräver dock att samtliga kommentarer är aktiva/valida (matchas mot något dagboksinlägg som inte är satt osynligt eller likn). De ska däremot vara sorterade korrekt. Med extra kontroller att kommentaren verkligen är för aktuellt dagboksinlägg kan det fixas.

Psuedokod

arrGb = rs1.getrows() ' inlägg
arrCom = rs2.getrows() ' kommentarer
i = 0

for each line in arrGb
  print gbContent
  for c = i to i + antal_kommentarer
    print arrCom[c]
  i = i + antal kommentarer
Medlem sedan dec. 2001873 inlägg
#6

Har anpasssat din kod en aning men vet inte om det är korrekt utfört av mig. Den stegar inte vidare på varje dagbokspost och den stegar ej heller vidare vid ny dagdokspost.
Jag är osäker på hur jag skall översätta denna rad:

print arrCom[c]
response.write arrRecSet1(c,0)

??

Språket är ASP.

Medlem sedan dec. 20003 563 inlägg
#7

Det är vanliga 2-dimensionella arrayer som getrows() returnerar. Nedan har du lite mer asp-kod som skall fungera. Du måste dock själv veta vilka fält som du returnerar för att veta vilket index de får i arrayen.

set rs = conn.execute("SELECT dagbok.*, (select count(*) from dagkommentarer ts where ts.komOrigin = dagbok.dagId) as antal_kommentarer
FROM dagbok ORDER BY dagbok.dagId DESC")
if not rs.eof then
arrGbok = rs.getrows()
end if

set rs = conn.execute(select * from dagkommentarer order by komOrigin desc)
if not rs.eof then
arrCom = rs.getrows()
end if

curComment = 0
for i = lbound(arrGbok, 2) to ubound(arrGbok, 2)
	comments = arrGbok(0, i) ' 0 måset vara indexet för kolumnen som returnerar antal kommentarer
	' Skriv ut inlägget här som exempel
	response.write arrGbon(1, i) ' ex namn
	response.write arrGbon(2, i) ' ex texten
	
	' Gå igenom samtliga kommentarer
	for c = curComment to curComment + comments - 1
		response.write arrCom(1, c) ' ex namn
		response.write arrCom(2, c) ' ex kommentaren
	next
	
	curComment = curComment + comments
next

Lite felhantering skulle inte skada btw. ;)

128 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)