SQL Abfrage, Anzahl Gesamttreffer ermitteln wenn Limit gesetzt

Registrierer

Erfahrenes Mitglied
Code:
SELECT id FROM tabelle WHERE id > '1' LIMIT 10

Jetzt habe ich 10 Treffer, obwohl es eigentlich 1000 Einträge gibt.
Kann ich aus gleicher Abfrage die Gesamtanzahl Treffer mit einbauen, oder müsste ich um die Gesamtanzahl zu ermitteln eine zweite Abfrage ohne Limit machen?

Zielausgabe: 10 Treffer von 1000
 
Da die 10 ja ein von dir gesezter Wert ist:
SQL:
SELECT 
    10 AS anz,
    COUNT(*) AS total
FROM
    tabelle
WHERE
    id > 1

Achja, wenn id eine Zahl ist, dann vergleiche sie auch als Zahl, nicht als String.
 
Zuletzt bearbeitet von einem Moderator:
Danke, verstehe das Prinzip nicht ganz. Das wäre jetzt ein konkretes auf meine DB bezogenes Beispiel:
Es gibt 110 Einträge gesamt die darauf passen, aber es wird nur ein Datensatz angezeigt, es sollten jedoch 10 sein.
SQL:
SELECT 
NAME_1,
10 AS anz,
COUNT(*) AS total
FROM
haase_kunden
WHERE
NAME_1 LIKE  '%we%'

Achja, wenn id eine Zahl ist, dann vergleiche sie auch als Zahl, nicht als String.
War nur ein Beispiel...
 
Zuletzt bearbeitet von einem Moderator:
Undda soll immer 10 von 110 angezeigt werden oder Item-Nr von 110?
Ich geh mal vom 2ten aus.

Ungetestet:
SQL:
SELECT
    -- Zähler um eines erhöhen
    @itemNr := @itemNr + 1 AS nr,
    vars.gesammt,
    t.id,
    t.name
FROM
    -- vars gibt genau eine Zeile zurück
    (
        SELECT 
            -- Zählen wieviel Zeilden gefunden werden
            count(*)  AS gesammt,
            -- gleich unseren Zähler initialisiren
            @itemNr := 0
        FROM 
            my_table AS tg
        WHERE 
            -- Hier die gleichen Bedinungen wir im Haubtquery.
            tg.name LIKE '%xy%'
    ) AS vars,
    my_table AS t
WHERE 
    t.name LIKE '%xy%'
LIMIT 10
 
Zuletzt bearbeitet von einem Moderator:
Ich denke, ich habe meine Frage falsch gestellt. Ich versuch es noch einmal:

Tabelle:

id name

1 anton
2 guenther
3 gisela
4 gerd
Code:
SELECT name FROM Tabelle WHERE name like 'g%' LIMIT 2
gibt mir als Ergebnis 2 Datensätze, da ja die Ausgabe auf 2 limitiert ist.
Um jetzt eine Aussage zu formulieren wie:
2 von 3 Datensätzen gefunden, mache ich noch eine zweite Abfrage ohne Limit mit gleichen Kriterien:
Code:
SELECT COUNT(id) AS anzahl FROM Tabelle WHERE name like 'g%'
Ausgabe: 3

Und jetzt die Frage:

Muß ich hier 2 Abfragen machen, oder kann man das in einer kombinieren?
 
COUNT() ist eine Aggregatsfunktion und liefert einen einzigen Wert zurück. Wie willst du denn das mit deiner ersten Query kombinieren? Die liefert ja maximal so viele Werte (=name) zurück wie du per Limit definierst. Da ist mir nicht klar was genau du denn erwartest.

Mach mal mit deiner Tabelle Oben ein Beispiel was du als Resultat der Query erwarten würdest. Welche Spalten sollte es da geben und wie sollten die befüllt sein?
 
Ich wüsste nicht, wie ich es noch besser erklären könnte.

Durch Limitierung wird die Ausgabe begrenzt. Ohne Limitierung hätte ich alle Datensätze.

Ich muß also wenn ich beide Ergebnissummen haben möchte, 2 Abfragen mit identischen Kriterien machen um z. B. folgendes Ergebnis zu erhalten:

10 angezeigte Datensätze von insgesamt 100.
 
Und ich kann nicht verstehen was denn so kompliziert daran sein kann, uns dein erhofftes Queryresultat klar mitzuteilen..... (Tipp: mach eine Resultattabelle!)

> 10 angezeigte Datensätze von insgesamt 100
Ich treff jetzt einfach mal eine Annahme aufgrund dieser Aussage. Ich vermute nun, dein erhofftes Queryresultat für die Beispieltabelle von dir ist folgendes:

Beispieltabelle:

id name
1 anton
2 guenther
3 gisela
4 gerd

Queryresultat:

limited_cnt total_cnt
2 3


Sowas wirst du so mit einer eingzigen Query erhalten:
SQL:
SELECT 
CASE WHEN COUNT(name) > 2 THEN 2 ELSE COUNT(name) END AS limited_cnt,   -- hier definierst du dein limit    
COUNT(name) AS total_cnt 
FROM Tabelle 
WHERE name like 'g%';
 
Zuletzt bearbeitet von einem Moderator:
> 10 angezeigte Datensätze von insgesamt 100
oder aber du willst wirklich die limitierten Datensätze anzeigen und mit dem total_cnt vebinden. Basierend auf deiner Beispieltabelle also als Resultat:

Queryresultat:

name total_cnt
gerd 3
gisela 3

Das wirst du so kriegen:
SQL:
SELECT 
name,
(SELECT COUNT(name) FROM Tabelle WHERE name like 'g%') AS total_cnt
FROM Tabelle 
WHERE name like 'g%'
LIMIT 2;

Oder auch etwas schöner:
SQL:
SELECT 
a.name,
b.total_cnt
FROM Tabelle a, (SELECT COUNT(name) AS total_cnt FROM Tabelle WHERE name like 'g%') b
WHERE a.name like 'g%'
LIMIT 2;
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück