Brauche Hilfe zu einer Tabellenabfrage

M4rkus

New Member
Hallo zusammen,

ich bräuchte Hilfe zu einer Tabellenabfrage in meiner Mysql-Datenbank.

Ich habe eine Tabelle in der Kommentare von Benutzern gespeichert werden.
Zu jedem Kommentar wird auch das Datum in der Spalte msg_date abgelegt.
Der Typ der Spalte msg_date ist: datetime.

Zur Zeit verwende ich eine Abfrage die die Kommentare der User zählt.

SELECT COUNT(*) FROM comments WHERE user_id = 2

Nun möchte ich aber erst die Kommentare ab einem bestimmten Datum aufwärts zählen.
Wie gesagt, das Datum steht in der Spalte msg_date...sowas hier: 2010-03-26 11:57:12

Hat jemand einen Vorschlag wie ich den Select-Befehl umschreiben muss ?


Beste Grüße und Danke für Antworten, Markus.
 
Du kannst mit bool'schen Operatoren auch mehrere Bedingungen verknüpfen.
Häng also noch an Deine WHERE Klausel ein AND msg_date>'2010-01-01 00:00:00' dran.

Gruss
 
Du könntest auch nur über die Spalte "msg_date" zählen. Ab einer gewissen Größe wirds unperformant, wenn Du über die ganze Tabelle zählst.
 
Das kann aber nur klappen, falls ein Index vorhanden ist, was natürlich ohnehin sinnvoll wäre. Ohne Index wird ein Heapscan durchgeführt, bei dem sowieso alle Seiten geladen werden müssen, da bei MyISAM jedes Tupel zusammenhängend gespeichert wird.

Mit Index kommt es auf MyISAM und dessen Implementierung des Index an, ob es schneller geht. Die Frage ist, ob er dann über den Index zählen kann, ohne die Tupel aus der Tabelle zu laden. Laut wstuermer muss das also gehen, was ich mir bei MyISAM auch gut vorstellen kann.
 
Man könnte für jeden geschriebenen Kommentar im Grunde auch eine extra Spalte in der User-Tabelle anlegen und diese Zahl dann immer um 1 inkrementieren - das würde eventuell sogar performanter gehen.
 
Hallo zusammen,

ihr habt mir sehr geholfen, es funktioniert einwandfrei ;)
Ich habe überhaupt keinen Gedanken daran verschwendet, dass man mit den Operatoren auch Datumsabfragen realisieren kann !

Das direkte zählen über die Spalte msg_date werde ich mir gegebenenfalls überlegen falls es unperfomant wird.
Und ja, die Tabelle hat einen Index :)
 
Back
Top