Ich versuche, eine Prozedur zu erstellen, die Anzeigen aus einer Datenbank in Rotation auswählt. Schließlich wird die ausgewählte Anzeigenzeile zurückgegeben und der Wert der Ansicht erhöht.MYSQL: Probleme mit COUNT und SUM-Funktionen in mehreren Zeilen auswählen
Der Teil I aktuell arbeite sollte
- Pull Ergebnisse aus der Tabelle ‚Anzeigen‘, wo die ‚Stadt‘ entspricht die jeweilige Stadt und den ‚Spot‘ entspricht den gegebenen Ortsnamen.
- Fügen Sie eine zusätzliche 'num'-Spalte hinzu, die die resultierenden Zeilen auflistet.
- Aus diesen Ergebnissen die Zeile auswählen, in dem die ‚num‘ Spalte SUM entspricht (‚Ansichten‘)% COUNT (id)
Diese erlauben sollte mich so lange die Anzeigen in Rotation anzuzeigen, wie ich das erhöht Ansichten Spalte, wenn sie eine Anzeige schließlich ausgewählt und zurück
Der Code, den ich aktuell arbeite ist ....
SET @t1=-1;
SELECT *
FROM (SELECT @t1 := @t1+1 AS num, ads.*
FROM ads
WHERE city = 'Maitland'
AND spot = 'home-banner'
ORDER BY id ASC) dt
WHERE dt.num = SUM(dt.views) % COUNT(dt.id);
... Allerdings bin ich Probleme mit der SUM und COUNT Funktionen. Ich bekomme eine ungültige Verwendung des Gruppenfunktionsfehlers. Ich habe auch versucht, die Funktionen in die Unterabfrage zu verschieben, aber aus irgendeinem Grund bewirkt dies, dass die Unterabfrage nur ein Ergebnis zurückgibt.
Ergebnisse von Sub-Abfrage
num id spot city views
0 1 home-banner Maitland 0
1 2 home-banner Maitland 2
2 3 home-banner Maitland 0
3 4 home-banner Maitland 0
4 5 home-banner Maitland 0
5 6 home-banner Maitland 0
Danke, aber würde dies das Modul von Ansichten und zählt für die gesamte Anzeigentabelle nicht berechnen, nicht die Ergebnisse der Unterabfrage ? Ich bin nur besorgt über die Ergebnisse, die der Stadt und dem Ort entsprechen. Ich denke, ich könnte die WHERE-Klausel wiederholen, aber wäre das nicht doppelt leistungsfähig? – christian
Sie haben Recht, ich habe die WHERE-Klausel verpasst. Und ja, es wird länger dauern, aber das ist der einzige Weg, an den ich denken kann :(Sie könnten auch eine temporäre Tabelle erstellen und alle aktuellen Stadt- und Punktdaten speichern und dann diese Tabelle abfragen, um die Summe und die Anzahl zu erhalten –
Okay, hoffentlich ist es in der Praxis nicht so schlecht. Danke für den Vorschlag für einen temporären Tisch, vielleicht wäre das eine bessere Route. Letztendlich werde ich mehrere Werbespots (10 oder so) für die gleiche Stadt ziehen. – christian