Von SQL-Abfrage nur bestimmte zählen

Papenburger

Erfahrenes Mitglied
Hallo,

folgende Abfrage benutze ich zur Zeit:
"SELECT * FROM tabelle ORDER BY id DESC LIMIT 0, 30"

Nun ich würde gerne eine Abfrage erstellen, welche nur die Einträge zählt wo in diesem Beirech read='1' ist.
Wie lautet die Abfrage, wer könnte mir da nen Tipp geben bzw. helfen?

Dakne!


LG
Papenburger
 
Hallo Papenburger,

es müsste ungefähr so gehen (oder ich habe Dein Problem missverstanden):
SELECT * FROM tabelle WHERE read=1 ORDER BY id DESC LIMIT 0, 30

Ich bin dabei davon ausgegangen, dass "read" eine Spalte der Tabelle ist, die Zahlen enthält.

Gruß
wiel
 
Hallo Papenburger,

es müsste ungefähr so gehen (oder ich habe Dein Problem missverstanden):
SELECT * FROM tabelle WHERE read=1 ORDER BY id DESC LIMIT 0, 30

Ich bin dabei davon ausgegangen, dass "read" eine Spalte der Tabelle ist, die Zahlen enthält.

Gruß
wiel


Laut dieser Abfrage sucht der 30 Datensätze welche den Wert 1 in der Spalte read haben.
Begründung:

Such * von Tabelle wo read='1', ordne nach umgekehrter Reihenfolge zu ID und gebe 30 Datensätze zurück.
 
Zuletzt bearbeitet:
Ja, richtig.
Unter Oracle würde das dann mit
SELECT count(*) FROM tabelle WHERE read = 1
gehen. Ich kenne mich mit mySQL nicht gut aus, aber da sollte es auch sowas wie count() geben oder?
Oder wolltest Du nur wissen, wieviele der ersten 30 Datensätze read=1 haben?
Gruß
wiel
 
Ja und wo ist jetzt das Problem das Query zusammenzusetzen? Die Zutaten hast du doch alle ..
Code:
SELECT count(*) FROM tabelle WHERE read = 1 ORDER BY id DESC LIMIT 0,30
 
Nee, ich glaube das ist es noch nicht ganz, weil das LIMIT nur besagt, dass man nicht mehr als 30 Ergebnis-Datensätze haben will. Er möchte aber wissen (wenn ich sein Problem jetzt endlich richtig verstanden habe) wieviele der 30 ersten Datensätze read=1 haben.
Gruß
wiel
 
Nee, ich glaube das ist es noch nicht ganz, weil das LIMIT nur besagt, dass man nicht mehr als 30 Ergebnis-Datensätze haben will. Er möchte aber wissen (wenn ich sein Problem jetzt endlich richtig verstanden habe) wieviele der 30 ersten Datensätze read=1 haben.
Gruß
wiel

Das geht meines wissens nach nur mit einer unterabfrage also ungefähr:
Code:
SELECT Count(*) From Tabelle Where Primärschlüssel IN (SELECT Primärschlüssel von Tabelle ORDER BY... LIMIT...) AND read = 1
Gibt allerdings nur ein Problem, nähmlich, das mysql keine LIMIT s in Unterabfragen zulässt - deshalb fürchte ich das Problem muss mit softwarecode (also das Ergebnis in einer Schleife noch mal zu filtern) gelöst werden - bei 30 Datensätzen sollte das aber nicht wirklich ein Prformenceproblem sein
 
Zuletzt bearbeitet:
Zurück