2016-04-12 6 views
1

EDIT: Wie sich herausstellt, scheint es, dass der Code wie vorgesehen ausgeführt wird. Es war nur ein Debugging-Problem. Entschuldigen Sie bitte die Störung!Mysql FOUND_ROWS mit HAVING-Anweisung

Ich führe eine große Abfrage, die mehrere Filter und JOINs beteiligt, und auch ich paginieren die Ergebnisse daher die Abfrage wurde zweimal ausgeführt.

Ich versuchte SQL_CALC_FOUND_ROWS mit zweimal lief die Abfrage zu vermeiden, aber da ich Filterung mit HAVING Aussagen Ich erhalte die ungefilterten Gesamt, vor der „mit Aussage“. Ich muss die HAVING ausführen, da die ursprüngliche Abfrage auf dem Zählen von Zeug beruht - was ich weiß, ist schrecklich, aber ich habe nicht die Berechtigungen, die DB-Struktur jetzt zu ändern.

Eine Idee meiner SQL:

SELECT SQL_CALC_FOUND_ROWS u.id as user_id, 
       u.full_name as full_name, 
       u.email as email, 
       COUNT(stuff) as logs, 
    FROM 
     user u 
     LEFT JOIN 
     profile u_p on u_p.user_id = u.id 
     GROUP BY u.id 
     HAVING logs>5 
    LIMIT 15 

wenn ich die neue SQL-Abfrage SELECT FOUND_ROWS() as total_rows ich den vollen Betrag von u.id ROWS bekommen laufen und nicht die, die gefiltert. (Dies geschieht nur mit einer HAVING Anweisung, und nicht eine WHERE Klausel)

+0

Was willst du hier vom 'LEFT JOIN'? –

+0

Es war nur ein Beispiel SQL in der tatsächlichen SQL Ich habe viel mehr Zeilen ausgewählt, einige aus dem Profil. Wie auch immer, es war schlecht. Der Code lief wie beabsichtigt – user982962

+1

Sie können nicht einmal die Mühe machen, eine Frage Eigenschaft zu schreiben, und Sie erwarten, dass Menschen Ihr Problem verstehen und Ihnen dabei helfen. Du bist der schlimmste aller Menschen! – ant

Antwort

0

Wie sich herausstellt, scheint es, dass der Code wie vorgesehen ausgeführt wird. Es war nur ein Debugging-Problem. Entschuldigen Sie bitte die Störung!