2012-04-08 8 views
0

Ich möchte die Gesamtzahl der Zeilen durch die folgende Abfrage zurückgegeben zählen:Get Anzahl der komplexen Abfrage

SELECT table1.*, COUNT(table2.fk) * (100/18) AS 'number' 
FROM table1 INNER JOIN table2 ON table1.pk = table2.fk 
WHERE table1.Street LIKE '$Street%' 
AND table1.City LIKE '$City%' 
AND table1.Zip LIKE '%$Zip' 
AND table1.DOBY LIKE '%$DOBY' 
AND table1.DOBM LIKE '%$DOBM' 
AND table1.DOBD LIKE '%$DOBD' 
AND table1.Gender LIKE '$gender%' 
AND table2.year>= 2004 
AND table2.type IN ('AA', 'AB', 'AC') 
GROUP BY table2.fk 
HAVING (COUNT(table2.fk) * (100/18)) >= '$activity' 
ORDER BY DOBY, DOBM, DOBD ASC 

Die Abfrage der Anzahl oder Zeiten zählt der Primärschlüssel der Tabelle 1 als Fremdschlüssel von table2 auftritt und berechnet einen Prozentsatz ("Anzahl") basierend auf einem festen Betrag. Es funktioniert gut genug, aber ich habe Probleme, die Gesamtzahl der Datensätze für mein Paginierungsskript zu erhalten. Ich würde es schätzen, wenn jemand einige Vorschläge oder Lösungen anbieten kann.

+0

Würde eine Unterabfrage funktionieren (d. H., '(SELECT COUNT (ID) FROM Tabelle WHERE Bedingung = $ Variable) AS count')? Oder ist diese Abfrage, für was Sie die Anzahl benötigen? Ich sehe das Schlüsselwort "LIMIT" nicht. –

+0

Dies ist die Abfrage, für die ich die Anzahl benötige. Es ist viel komplexer, aber ich habe es aus Gründen der Einfachheit etwas reduziert. Das Limit-Schlüsselwort kommt nach der letzten Zeile, "LIMIT $ start, $ limit;" – deathonater

Antwort

0

u kann SQL_CALC_FOUND_ROWS tun (Google für genaue Syntax)
Und dann verwenden SELECT FOUND_ROWS() AS total

+0

Vielen Dank! Es ist ein bisschen langsam in der sehr großen Datenbank, die ich benutze, aber es muss für jetzt arbeiten. – deathonater

+0

Wenn es sehr groß ist, sollten Sie die Zählung zwischenspeichern. Niemand gibt genaue Zahlen (nicht Ereignis Google) in ihren Paginierungen für wirklich große Zahlen. Und noch eine Sache, die Sie NUR beim ersten Mal verwenden, sollten Sie es für kleine Zeitintervalle definitiv zwischenspeichern. –

0

Möchten Sie, was Itay Moav sagt, sollte eine Programmiersprache für die found_rows Funktion eine Funktion haben. Laut function documentation gibt es die Anzahl der Zeilen einer SELECT-Anweisung mit einem Schlüsselwort LIMIT zurück, wenn das Schlüsselwort LIMIT nicht vorhanden ist.

Wenn nicht, können Sie einfach eine weitere SELECT Anfrage an die Datenbank senden: SELECT FOUND_ROWS();. Es wird die gleiche Information zurückgeben.

Verwandte Themen