MySQL gefundene Ergebnisse trotz LIMIT-Beschränkung?

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,


    ich möchte aus der Datenbank 10 Einträge herauslesen und dem User mitteilen,
    dass noch eine bestimmte Anzahl an weiteren Einträgen vorhanden sind.


    SQL
    SELECT txt FROM Tabelle LIMIT 10;


    Dieser Query läd allerdings nur 10 Einträge heraus, wie kann ich feststellen, ob es mehr sind und wieviele?


    SQL
    SELECT txt,COUNT(*) FROM Tabelle LIMIT 10;


    Das funktioinert, allerdings läd er dann nur noch einen Eintrag aus der Datenbank.



    Danke im Vorraus.

  • Sorry, aber wie soll mir das weiterhelfen?


    Wie ich abfrage wieviele Ergebnisse gefunden wurden, weiß ich:

    SQL
    SELECT COUNT(txt) FROM Tabelle


    Aber wie suche ich 10 Einträge heraus und zähle alle Einträge in EINEM Query?
    (Ich brauche das in einem Query, weil sonst lokale Variablen im Script verfallen.)

  • Dazu kannst SQL_CALC_FOUND_ROWS nutzen, hier wird die anzahl zurück gegeben , welche man ohne limit hätte, das problem bei deiner ersten Idee ist das durch Count
    mitgeteilt wird das nur 1 ergebnis zur Verfügung steht.


    Das ergebnis wird als letzter Eintrag hinten angehangen falls du das ändern möchtest müsstest du das ganze sortieren

    SQL
    SELECT SQL_CALC_FOUND_ROWS spalte FROM tabelle LIMIT 10 UNION SELECT FOUND_ROWS();
  • Das klingt super und könnte die Lösung für mein Problem sein! :)


    Allerdings möchte ich zwei Spalten aus der Tabelle herauslesen, das bekomme ich irgendwie nicht hin..

    SQL
    SELECT SQL_CALC_FOUND_ROWS spalte, spalte2 FROM tabelle LIMIT 10 UNION SELECT FOUND_ROWS();



    Müsste gehn

    ▬|██████|▬
    This is Nudelholz.
    Copy Nudelholz in your Signatur
    to make better Kuchens
    and other Teigprodukte!

  • Das klingt super und könnte die Lösung für mein Problem sein! :)


    Allerdings möchte ich zwei Spalten aus der Tabelle herauslesen, das bekomme ich irgendwie nicht hin..


    Ok da musst du einen wert ergänzen.


    Zum auslesen es werden bei LIMIT 10, 11 Beiträge ausgelesen , der 11te Beitrag wäre die anzahl der ganzen Ergebnisse.


    Beispiel


    SQL
    SELECT SQL_CALC_FOUND_ROWS `Did`,`x`,`y`,`z` FROM `amazing_objects` LIMIT 10 
    UNION SELECT FOUND_ROWS(), NULL, NULL, NULL;


    Output,
    Did x y z
    3 1479.39 -1366.02 151.384
    4 1468.89 -1356.42 151.384
    5 1479.39 -1356.42 151.384
    6 1468.91 -1366.02 158.025
    7 1468.91 -1356.42 158.025
    8 1479.41 -1356.42 158.025
    9 1479.39 -1366.02 158.025
    10 1468.91 -1356.42 154.791
    11 1479.39 -1366.02 154.791
    12 1468.45 -1351.68 152.908
    67 NULL NULL NULL

  • Ich glaube damit komm ich klar, vielen Dank!! :)


    Wenn du willst kannst du mir noch den Syntax und die Keywords SQL_CALC_FOUND_ROWSm UNION und FOUND_ROWS() erklären,
    da ich dessen Benutzung nicht so wirklich verstanden habe.

  • Ich glaube damit komm ich klar, vielen Dank!! :)


    Wenn du willst kannst du mir noch den Syntax und die Keywords SQL_CALC_FOUND_ROWSm UNION und FOUND_ROWS() erklären,
    da ich dessen Benutzung nicht so wirklich verstanden habe.

    Union:


    Mit UNION haben wir die Möglichkeit das Ergebnis mehrerer SELECT- Querys zu kombinieren. Dabei ist zu beachten das jeweils dieselbe Anzahl an Spalten ausgewählt werden und diese möglichst auch den selben Datentyp haben. Es gibt noch eine zusätzliche Variante von UNION und zwar UNION ALL .Der Unterschied besteht darin, dass bei UNION gleiche Ergebnisse zusammengefasst werden. Also fast wie bei einem INNER-Join.


    SQL_CALC_FOUND_ROWS: Hier wird die anzahl zurück gegeben , welche man ohne Limit hätte.


    FOUND_ROWS() : Gibt die Anzahl, welche zuletzt via SQL_CALC_FOUND_ROWS ermittelt wurde zurück.


    Im Detail:
    http://dev.mysql.com/doc/refman/5.1/de/union.html
    http://dev.mysql.com/doc/refma…nformation-functions.html

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen