2016-07-13 11 views
1

Ich habe die folgende SQL-Abfrage: "SELECT * FROM table WHERE id = '$geo_name_id' ORDER BY timestamp DESC LIMIT 10 OFFSET $offset"SQL Rückkehr Count + anderen Spalten

Dies funktioniert gut, aber jetzt will ich auch die Menge der Zeilen in der gesamten Tabelle zurückkehren WHERE id = 'geo_name_id (ohne Begrenzung). Ich habe versucht, etwas wie folgt:

"SELECT COUNT(*) as totalExpectedItems, * FROM story_img_vid WHERE id = '$geo_name_id' ORDER BY timestamp DESC LIMIT 10 OFFSET $offset" 

Allerdings scheint dies nicht wie erwartet funktioniert, da es nur eine Zeile zurückgibt.

+0

Wenn Sie möchten, sollten Sie im Anschluss an diese einfachen zweistufigen Vorgehensweise: 1. Wenn Sie noch nicht geschehen, stellen Sie korrekte CREATE- und INSERT-Anweisungen (und/oder ein sqlfiddle) bereit, damit wir das Problem leichter replizieren können. 2. Wenn Sie dies noch nicht getan haben, geben Sie eine gewünschte Ergebnismenge ein, die den Informationen in Schritt 1 entspricht. – Strawberry

Antwort

1

Verwenden einer Unterabfrage:

"SELECT t.*, 
     (SELECT COUNT(*) FROM table 
     WHERE id = '$geo_name_id') as cnt 
    FROM table t 
    WHERE t.id = '$geo_name_id' 
    ORDER BY t.timestamp DESC 
    LIMIT 10 OFFSET $offset" 

cnt Spalte wird die Zählung enthalten.

oder eine Verknüpfung zu einer abgeleiteten Tabelle:

"SELECT t.*, 
     t2.cnt 
FROM table t 
JOIN(SELECT s.id,count(*) as cnt 
     FROM table s GROUP BY s.id) t2 
    ON(t.id = t2.id) 
WHERE t.id = '$geo_name_id' 
ORDER BY t.timestamp DESC 
LIMIT 10 OFFSET $offset" 
+0

Können Sie einfach erklären, was 't. *' Tut, das ist der einzige Teil, den ich verwirrend finde – Alk

+1

Es ist ein Alias, Jedes Mal, wenn Sie 'table' aufrufen möchten, anstatt' table.Column' zu schreiben, können Sie 't.column' schreiben. Also 't. *' Ist wie '*' nur von 'table' – sagi

+0

In Ordnung, vielen Dank, ich werde deine Antwort akzeptieren, wenn es mir in 10 Minuten erlaubt :) – Alk

0

es wie folgt tun:

"SELECT COUNT(*) as totalExpectedItems, * FROM story_img_vid WHERE id = '$geo_name_id'"