Hallo jungs,
Ich hab hier 3 tabellen
1. Tabelle:Beiträge: hat die felder BeitragsID Text Überschrift...
2.Tabelle:Views:hat die felder viewID UserID BeitragsID...
3.Tabelle:Ranting:mit RatingID BeitragsID UserID datum...
Um jetzt die Bewertung und die Views für einen Beitrag zu bekommen musste ich die 2 mal kreuzen. Dabei kam ziemliocher unfuhg heraus und ich musste viel rechnen und denken bis ichs hatte.
SELECT a.BeitragsID, a.Description, a.Header, a.Date, COUNT(DISTINCT b.date) as Views, SUM(c.Rating)/Count(c.BeitragsID) AS Rating
FROM aspnet_Beitrag AS a, aspnet_Views as b,aspnet_Rating AS c
WHERE a.Date >= @date AND b.BeitragsID = a.BeitragsID AND c.BeitragsID = b.BeitragsID
GROUP BY a.BeitragsID,a.Description, a.Header, a.Date
ORDER BY a.date
Das ganze funktioniert jetzt weil die datensätze die durch die kreuzung entstehen eine proportionale vervielfältigung von den eigentlichen rating-einträgen sind.
beispiel:
1 Beitrag, 5 views, 6 ratings
der rating-durchschnitt is 3
durch die doppelte kreuzung werden jeder der 5 views mit jedem der 6 ratings gekreuzt
raus kommen 30 datensätze
innerhalb von den 30 ergebnisdatensätzen steckt jedes wirkliche rating das abgegeben wurde genau 5 mal drin.
ABER: Was ist wenn ich jetzt nicht 6 ratings und 5 Views hab sonder 69954126 Views und 45698322 Ratings?????
Könnt dann mein Server zusammenbrechen....
und überhaupt...verbraucht es nicht zuviele ressourcen jedesmal eine abfrage auszuführen die alle spalten in miner tabelle zählt? Also wenn ich 13125 Beiträge hab und davon jeder irgendwie 51385 Views und 1062 Ratings..
Ich meine wird es dann nicht alles zuviel????
Vielen Dank schonmal im vorraus für die antworten..achja falls jemand ne besser lösung hat kann er sie gerne posten
Gruß
staeblorette
Ich hab hier 3 tabellen
1. Tabelle:Beiträge: hat die felder BeitragsID Text Überschrift...
2.Tabelle:Views:hat die felder viewID UserID BeitragsID...
3.Tabelle:Ranting:mit RatingID BeitragsID UserID datum...
Um jetzt die Bewertung und die Views für einen Beitrag zu bekommen musste ich die 2 mal kreuzen. Dabei kam ziemliocher unfuhg heraus und ich musste viel rechnen und denken bis ichs hatte.
SELECT a.BeitragsID, a.Description, a.Header, a.Date, COUNT(DISTINCT b.date) as Views, SUM(c.Rating)/Count(c.BeitragsID) AS Rating
FROM aspnet_Beitrag AS a, aspnet_Views as b,aspnet_Rating AS c
WHERE a.Date >= @date AND b.BeitragsID = a.BeitragsID AND c.BeitragsID = b.BeitragsID
GROUP BY a.BeitragsID,a.Description, a.Header, a.Date
ORDER BY a.date
Das ganze funktioniert jetzt weil die datensätze die durch die kreuzung entstehen eine proportionale vervielfältigung von den eigentlichen rating-einträgen sind.
beispiel:
1 Beitrag, 5 views, 6 ratings
der rating-durchschnitt is 3
durch die doppelte kreuzung werden jeder der 5 views mit jedem der 6 ratings gekreuzt
raus kommen 30 datensätze
innerhalb von den 30 ergebnisdatensätzen steckt jedes wirkliche rating das abgegeben wurde genau 5 mal drin.
ABER: Was ist wenn ich jetzt nicht 6 ratings und 5 Views hab sonder 69954126 Views und 45698322 Ratings?????
Könnt dann mein Server zusammenbrechen....
und überhaupt...verbraucht es nicht zuviele ressourcen jedesmal eine abfrage auszuführen die alle spalten in miner tabelle zählt? Also wenn ich 13125 Beiträge hab und davon jeder irgendwie 51385 Views und 1062 Ratings..
Ich meine wird es dann nicht alles zuviel????
Vielen Dank schonmal im vorraus für die antworten..achja falls jemand ne besser lösung hat kann er sie gerne posten
Gruß
staeblorette
Comment