|
|||
Ohne deine Db-Struktur hier irgendwelche Syntaxfehler aufdecken ist doch völlig sinnlos, oder? Der Query sieht aber schon besser aus.
Nimm dir das was Jan gesagt hat zu Herzen. Ich weiß nicht wie groß deine Datenbank ist, denke aber wenn sie mal eine stattliche Größe(so 100-* mb) erreicht hat und du versuchst solche Berechnungen durchzuführen wird mySQL irgendwann anfangen zu swappen und dann geht dein ganzer Server, egal wieviel Ram der hat in die Knie. Ich hab das Dilemma gerade hinter mir.
__________________
rm -rf $HOME |
Sponsored Links |
|
|||
Zitat:
Ok, Group by versuche ich mal zu entfernen. Aber das an Jan's Post habe ich garnicht so richtig verstanden. Ich muss doch bei jedem Auslesen die Summe der Votes durch die Summe der Stimmen teilen, um den Durchschnitt zu bekommen. Wie soll ich das denn anders machen? oO Was mir grad auffällt: Meine DB hat grad mal 1 MB genial Naja, ich denke es ist trotzdem gut, wenn ich jetzt schon optimiere, sodass ich später nicht unter Zeitdruck gerate Edit: Ok, mein Query sieht nun so aus: Code:
EXPLAIN SELECT e.id, c.name, c.name as cat_name, c.id as catid, e.freigeschaltet, e.beschreibung, e.poster, e.poster_hp, e.hits, (sum(v.vote)/count(v.vote)) as roundedRating FROM link_entries e JOIN link_cats AS c ON e.cat_id = c.id JOIN link_voting AS v ON e.id = v.link_id WHERE e.flag = 1 AND e.freigeschaltet < 1142353931 AND c.id = 3 GROUP BY e.id ORDER BY freigeschaltet desc LIMIT 0, 30 Im Moment merke ich aber keinen Unterschied zu der Variante mit Where (wenn ich mir die Ausführungszeit in PhpMyAdmin anschaue). Ist das normal, liegt das an der kleinen Datenmenge und wird der Join Vorteile gegenüber dem Query mit where haben, sobald die Datenbestände größer sind? |
|
|||
Achso, noch was:
@Jan & @betrazivis: Group By brauch ich: "Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause ", sobald ichs weglasse ... |
|
||||
ja, klar ... das GROUP BY kannst du natürlich nur weglassen, wenn du beim voten schon die bewertung berechnest. bau das doch mal ein und teste, in wie weit es schneller ist.
__________________
Die Zeit hat ihre Kinder längst gefressen: hund (back in black) | ??? | ??? | ... |
|
|||
Aber wie soll ich dort schon die Bewertung berechnen?
Soll ich etwa sowas machen: den Vote für den entsprechenden Link in die Tabelle link_voting speichern (so wie ichs im Moment schon mache). Dann nochmal alle Votes und Anzahl der Votes aus dieser tabelle auslesen, durcheinander Teilen und diesen Wert in die Tabelle link_entries in die Spalte finalVote speichern? Sodass dort immer der aktuelle Vote-Wert drinsteht. Aber ich weiß nicht, ist das nicht ebenfalls sehr inperformant, wenn ich jedes mal dann die Tabelle link_voting auslese, den Durchschnitt für den aktuellen Link errechne und dann die Tabelle link_entries update? Oder meint Ihr was ganz anderes? Btw: Machen meine Indexe sinn (die ich oben gepostet habe) und merkt man den Unterschied zwischen Join und Where-Join erst bei größeren Datenmengen? |
|
||||
Ich würde das ganze so gestalten:
Tabelle 1 - Polls Poll_ID - Frage - Erstellungsdatum - Läuft bis - ... Tabelle 2 - Antworten Answer_ID - Poll_ID - Antwort - Votes Tabelle 3 - Votes Vote_ID - Answer_ID - Voter - Datum Damit dürfte alles möglich sein...
__________________
Bitte keine PN's - schreibt mir ne anständige Mail oder sprecht mich über Msn / Icq an Milian Wolff | Markdownify | Typogridder |
|
|||
Hö? Wie jetzt? Ich habe ja kein Poll-System. Die Leute können lediglich mit 1 - 5 bewerten, also brauche ich ja nur 2 Felder: vote, link_id.
Bei mir ist ja alles möglich, nur halt eventuell etwas inperformant, deswegen eventuell bei jedem Vote den neuen Durchschnitt in die Link_entries - Tabelle speichern ...? |
|
||||
Ahso, dachte das wäre was komplexeres...
Dann machste einfach zum Link (wegen Link_ID ?!) noch zwei extra Felder: a) Votes -> z.B. 3 (mal abgestimmt) b) Votesum -> z.b. 8 (5 + 2 + 1 abgestimmt) Wenn du jetzt nen neuen Vote reinbekommst machst du ein Votes = Votes + 1 und bei Votesum addierst du die Punktzahl des Votes hinzu.
__________________
Bitte keine PN's - schreibt mir ne anständige Mail oder sprecht mich über Msn / Icq an Milian Wolff | Markdownify | Typogridder |
Sponsored Links |
|
|||
und die andere Tabelle wegschmeißen? Aber hey, dann muss ich ja jedes mal beim Auslesen den Durchschnitt erneut errechnen. Genau das meinte Jan, soll ich versuchen, zu vermeiden ... Deswegen der Inhalt des 1. Posts auf dieser Seite
|
Sponsored Links |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Media Queries - Wie Ausnahmen behandeln? | Toxuas | CSS | 3 | 02.08.2016 12:12 |
Media Queries wollen einfach nicht auf dem Smartphone funktionieren! | Der.Andi | CSS | 4 | 15.11.2015 10:31 |
Media Queries vs. Extraseite | Mr.T | CSS | 5 | 07.11.2011 21:58 |
Queries für verschiedene DBs generieren lassen | Schelm.isch | Serveradministration und serverseitige Scripte | 5 | 23.06.2008 17:26 |
Seite optimieren | Petty | (X)HTML | 31 | 15.03.2005 23:22 |