Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

MySQL - Count und Limit in einem

Empfohlene Antworten

Veröffentlicht

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?

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

wie meinst du das mit "außerhalb"? :eek

Wollte jetzt net gerne noch ne DB-Abfrage machen, :hells: sondern schon alles in einem Statement :D Mensch i-wie muss das doch möglich sein :(

Wollte jetzt net gerne noch ne DB-Abfrage machen, :hells: sondern schon alles in einem Statement :D 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

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?

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

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

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 :D

s'Amstel

100 Millionen werden es nicht sein, aber du hast schon Recht!

Naja aber es ging ja um die DB-Abfrage :)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.