Steffen3:16 Geschrieben 25. Juni 2007 Geschrieben 25. Juni 2007 Hallo zusammen, ich möchte gern in einer Datenbankabfrage wo ich zum Schluss ein limit drin habe, gern aber auch ein Count auf alle Datensätze machen. Das Problem ist wenn ich eine Zählvariable einbaue, zählt der natürlich nur das, was die Datenbankabfrage bringt, und da sind limitangaben mit drin. Hat jemand eine Idee? Zitieren
Amstelchen Geschrieben 25. Juni 2007 Geschrieben 25. Juni 2007 geht IMO nicht. ein COUNT nach dem LIMIT zählt eben nur das eingeschränkte ergebnisset. was du machen kannst, nachdem du scheinbar eine scriptsprache verwendest, ist den gesamt-COUNT ausserhalb der mir LIMIT eingeschränkten abfrage auszuwerten. s'Amstel Zitieren
Steffen3:16 Geschrieben 25. Juni 2007 Autor Geschrieben 25. Juni 2007 wie meinst du das mit "außerhalb"? :eek Wollte jetzt net gerne noch ne DB-Abfrage machen, :hells: sondern schon alles in einem Statement Mensch i-wie muss das doch möglich sein Zitieren
Amstelchen Geschrieben 25. Juni 2007 Geschrieben 25. Juni 2007 es gibt nur die möglichkeit einer zweiten abfrage, allerdings kannst du das ja mit SQL_CALC_FOUND_ROWS kombinieren. AS Workshop » MySQL: Get total number of rows when using LIMIT MySQL AB :: MySQL 3.23, 4.0, 4.1 Reference Manual :: 12.10.3 Information Functions mönsch, liest hier eigentlich nie jemand die anleitungen? s'Amstel Zitieren
geloescht_JesterDay Geschrieben 25. Juni 2007 Geschrieben 25. Juni 2007 Wollte jetzt net gerne noch ne DB-Abfrage machen, :hells: sondern schon alles in einem Statement Mensch i-wie muss das doch möglich sein Count ist eine aggregat-funktion, die genau 1 Ergebnis liefert. Wie willst du das mit X Sätzen einer Abfrage kombinieren? Das geht allenfalls über weitere aggregat-funktionen wie z.B. sum kombiniert mit group by etc. Aber wenn deine Abfrage mehr als einen Satz liefert... :upps Zitieren
Steffen3:16 Geschrieben 25. Juni 2007 Autor Geschrieben 25. Juni 2007 Okay, erstmal vielen Dank für die schnelle und sehr gute Hilfe. Habe mir die Seite einmal durchgelesen, fand ich sehr gut erklärt, aber leider nicht so genau wo es eingebaut werden muss Auch auf der MySql-Doku-Seite konnte ich aus der Erklärung nicht schlauer werden. Auf der 1. Seite heißt es ja, das man trotzdem eine 2. Query ausführen muss, diese aber durch die ..FOUND_ROWS Funktion nicht die Datenbank so sehr beansprucht. Kannst du mir zur Einbaumethode vielleicht noch ein paar erste Schritte geben? Zitieren
Amstelchen Geschrieben 25. Juni 2007 Geschrieben 25. Juni 2007 du verwendest ganz einfach die klausel SQL_CALC_FOUND_ROWS in deinem ursprünglichen SQL-query. dies berechnet die anzahl der zeilen, *ohne* LIMIT zu berücksichtigen. $query_limited = "SELECT SQL_CALC_FOUND_ROWS * FROM deinetabelle ... LIMIT ...;"; anschliessend musst du nur noch die vorausberechneten zeilen abfragen: $query_count = "SELECT FOUND_ROWS();"; fertig. s'Amstel Zitieren
Steffen3:16 Geschrieben 25. Juni 2007 Autor Geschrieben 25. Juni 2007 Hab gerade na andere Lösung gefunden Dank dir Amstelchen für den Lösungsansatz. Ich nehme doch eine Zählvariable, speicher aber alles aus der Datenbank in ein Array, wo ich dann später mit einem Limit drauf zugreifen kann. Stichwort: PHP: array_slice - Manual Zitieren
Amstelchen Geschrieben 25. Juni 2007 Geschrieben 25. Juni 2007 Ich nehme doch eine Zählvariable, speicher aber alles aus der Datenbank in ein Array, wo ich dann später mit einem Limit drauf zugreifen kann. ich behaupte halt, dass das wesentlich unperformanter und speicherfressender ist, als die genau dafür zur verfügung stehenden funktionen - die sogar ein gewisses caching anbieten - zu verwenden. würde mich interessieren, wie sehr das den laufenden prozess von PHP aufbläht, wenn man die ganze tabelle - cool, z.b. 100 million DS - in ein array packt s'Amstel Zitieren
Steffen3:16 Geschrieben 25. Juni 2007 Autor Geschrieben 25. Juni 2007 100 Millionen werden es nicht sein, aber du hast schon Recht! Naja aber es ging ja um die DB-Abfrage Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.