[SQL/ASP/Access] Aantal reacties in weblog tellen *

Pagina: 1
Acties:

  • Dennis013
  • Registratie: Januari 2003
  • Laatst online: 20-04 14:38
Ik ben een weblog aan het schrijven en ik wil graag per bericht weergeven hoeveel reacties er op dat bericht zijn geweest.
Nou heb ik zelf net al de nodige uurtjes gespendeerd aan deze relatief simpele sql query maar ik zit helemaal vast met hoe ik dit nu het beste kan aanpakken. Ik heb hier op GoT ook al wat relevants kunnen vinden, maar ik heb moeite met het toepassen van die query's op de mijne.

De opzet is, zoals gezegd, redelijk simpel. Ik heb een tabel voor de berichten en een tabel voor de reacties.
tabel berichten: [blog]
tabel reacties: [reageer]

Dus ik moet nu op de een of andere manier [blog.blog_id] en [reageer.blog_id] in een sql query zien te vatten zodat ik per bericht kan laten weergeven hoe vaak er gereageerd is.

Ik had zelf met dreamweaver het volgende bij elkaar gerapt:
----
Dim RSReactieaantal
Dim RSReactieaantal_numRows
Dim strSQL

Set RSReactieaantal = Server.CreateObject("ADODB.Recordset")
RSReactieaantal.ActiveConnection = MM_connwelterusten_STRING
strSQL = "SELECT * FROM blog "
strSQL = strSQL & "WHERE blog_id = " & blog_id
RSReactieaantal.Source = "SELECT Count(reageer.blog_id) AS reactieaantal FROM reageer WHERE reageer.blog_id = " & CLng(blog_id)
RSReactieaantal.CursorType = 0
RSReactieaantal.CursorLocation = 2
RSReactieaantal.LockType = 1
RSReactieaantal.Open()

RSReactieaantal_numRows = 0
---

Titel klopt niet helemaal zie ik net..... :|

[ Voor 5% gewijzigd door Dennis013 op 06-01-2005 12:57 . Reden: Ik zit dat de titel niet helemaal goed ingevuld is.. ]


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Wat gaat er fout? Welke output krijg je nu?

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:00
Je gaat toch niet alle berichten gaan ophalen, en dan voor ieder bericht 1 query gaan doen om te kijken hoeveel reacties je hebt?
Dat staat nl. garant voor een slechte performance.

Doe dit gewoon in 1 query:
code:
1
2
3
4
code select blog.id, count(berichten.*)
from blog, berichten
where blog.id = berichten.blog_id
group by blog.id

https://fgheysels.github.io/


  • Dennis013
  • Registratie: Januari 2003
  • Laatst online: 20-04 14:38
whoami bedankt!
Na wat knustelen heb ik de volgende 'bijna perfect' werkende sql query eruit gekregen.

code:
1
2
3
4
"SELECT blog.blog_id, count(reageer.blog_id) AS aantal  
FROM blog, reageer  
WHERE blog.blog_id = reageer.blog_id  group by blog.blog_id  
ORDER BY blog.blog_id DESC"


Nou dit werkt bijna perfect alleen wanneer een item nul reacties heeft gekregen, komt er geen 0 te staan, maar wordt het getal overgeslagen en schuiven de juiste getallen door.
Hoe kan ik dat voorkomen?

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 08:13

sopsop

[v] [;,,;] [v]

Dennis013 schreef op donderdag 06 januari 2005 @ 14:54:
Nou dit werkt bijna perfect alleen wanneer een item nul reacties heeft gekregen, komt er geen 0 te staan, maar wordt het getal overgeslagen en schuiven de juiste getallen door.
Hoe kan ik dat voorkomen?
Vervang je where blog.blog_id = reageer.blog_id group by blog.blog_id
door een left, outer of inner join (ik haal ze altijd door elkaar)

=edit= een LEFT JOIN dus.

[ Voor 4% gewijzigd door sopsop op 06-01-2005 15:16 ]


  • Dennis013
  • Registratie: Januari 2003
  • Laatst online: 20-04 14:38
Boppert, is het volgens regels om te vragen hoe ik dit precies doe in een sql-query? :)

  • Noork
  • Registratie: Juni 2001
  • Niet online
Misschien is het aardig om gewoon een extra kolom met teller o.i.d. te maken. Dat is natuurlijk niet goed genormaliseerd dan, maar wel goed voor de performance.

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 08:13

sopsop

[v] [;,,;] [v]

Dennis013 schreef op donderdag 06 januari 2005 @ 15:41:
Boppert, is het volgens regels om te vragen hoe ik dit precies doe in een sql-query? :)
Vragen kan altijd.
Kijk eens aan:
http://www.w3schools.com/sql/sql_join.asp

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Je hebt een bericht-id, omdat je weet om welk bericht het gaat. Je wilt weten hoeveel reacties er op dat bericht zijn. SQL kent de count mogelijkheid. Dan lijkt het mij, met behulp van een zoekmachine en/of een redelijke dosis gezond verstand, geen erg moeilijke opgave om daar iets van te maken dat lijkt op:
 
SQL:
1
Select count(id) as AantalReacties from reageer where reageer.BlogID = @parBlogID
waarbij je voor de parameter @parBlogID de waarde van het bericht-id ingeeft waarvan je de reacties wil tellen.

Bij het idee van een teller-kolom krommen mijn tenen in mijn schoenen: NOOIT calculated values in een tabel opslaan, twee keer zoveel statements om alles bij te werken en geen zekerheid van een correcte waarde: stel de insert of update statement loopt niet ...

[ Voor 21% gewijzigd door OZ-Gump op 06-01-2005 16:01 ]

My personal website


  • Dennis013
  • Registratie: Januari 2003
  • Laatst online: 20-04 14:38
Ik ben nu nog eventjes aan het stoeien met w3c schools... maar valt allemaal niet mee.
OZ-Gump, ik wil toch geen query aanmaken voor elk bericht afzonderlijk toch?? Of begrijp ik je verkeerd nu?

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Dus je wilt een query die voor alle berichten een aantal reacties weergeeft? Dan heb ik je eerste post verkeerd begrepen, sorry.

Het voorbeeld op W3Schools is redelijk simpel:
SQL:
1
2
3
4
SELECT Employees.Name, Orders.Product
FROM Employees
LEFT JOIN Orders
ON Employees.Employee_ID=Orders.Employee_ID
als je daar de opmerking die gedaan is bijneemt:
The LEFT JOIN returns all the rows from the first table (Employees), even if there are no matches in the second table (Orders). If there are rows in Employees that do not have matches in Orders, those rows also will be listed.
kom je al redelijk snel tot de conclusie dat je voor de employees tabel je eigen blog tabel kunt gebruiken, terwijl de orderstabel jou reactie tabel is. Het enige dat je wil selecten is de count(reageer.ID) as AantalReacties, dus ...

- voorbeeld weggeedit - probeert u maar!

[ Voor 8% gewijzigd door OZ-Gump op 06-01-2005 16:40 ]

My personal website


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 19:00

gorgi_19

Kruimeltjes zijn weer op :9

Dennis013 schreef op donderdag 06 januari 2005 @ 12:54:
Titel klopt niet helemaal zie ik net..... :|
.oisyn schreef op zondag 09 mei 2004 @ 23:40:
Mocht je het zelf nou zien dat je een topictitel vergeten bent, ga dan niet heel stom je bericht lopen editten met iets als

[...]

Daar hebben wij namelijk weinig aan :P. Omdat de mods dan zelf een titel moeten verzinnen, en daardoor eerst de topicstart door moeten lezen, zodat het niet even snel geedit kan worden door een mod die toevallig even langs kwam en weinig tijd had. Dus, als je het ziet, bedenk dan meteen een titel en zet het erbij in je topic of via een topicreport (de [afbeelding]-knop bovenaan je topic), zodat een mod de titel meteen kan aanpassen. Dank u :)
Oftewel; geef even een goede titel aan als je wilt :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Dennis013
  • Registratie: Januari 2003
  • Laatst online: 20-04 14:38
titel: [SQL/ASP/Access] Aantal reacties per afzonderlijk bericht in weblog tellen
Excuses... ik zal het onthouden voor de toekomst!

- edit -
Ok weer wat verder, met de volgende sql query:

SELECT count(reageer.blog_ID) as AantalReacties
FROM blog
LEFT JOIN reageer ON Blog.Blog_ID=Reageer.Blog_ID

komt er het totale aantal reacties uit en dat was nou ook niet de bedoeling.... terwijl mijn inziens deze query gewoon correct zou moeten zijn?

[ Voor 56% gewijzigd door Dennis013 op 06-01-2005 17:06 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:00
boppert schreef op donderdag 06 januari 2005 @ 15:14:
[...]

Vervang je where blog.blog_id = reageer.blog_id group by blog.blog_id
door een left, outer of inner join (ik haal ze altijd door elkaar)

=edit= een LEFT JOIN dus.
Je kan eigenlijk ook perfect joinen in je where hoor; echter heb je wel gelijk dat het makkelijker is om met die specifieke JOIN clausules te werken.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:00
Dennis013 schreef op donderdag 06 januari 2005 @ 16:52:
titel: [SQL/ASP/Access] Aantal reacties per afzonderlijk bericht in weblog tellen
Excuses... ik zal het onthouden voor de toekomst!

- edit -
Ok weer wat verder, met de volgende sql query:

SELECT count(reageer.blog_ID) as AantalReacties
FROM blog
LEFT JOIN reageer ON Blog.Blog_ID=Reageer.Blog_ID

komt er het totale aantal reacties uit en dat was nou ook niet de bedoeling.... terwijl mijn inziens deze query gewoon correct zou moeten zijn?
Dat komt omdat je niet gegroepeerd hebt (en je hebt ook geen veld om te grouperen, vergelijk eens met m'n eerste query die ik hier gepost heb)

https://fgheysels.github.io/

Pagina: 1