kann mir jemand sagen, wie ich das Problem löse: Ich versuche mich seit einigen Tagen am PaginationHelper.
Mein Coding im Controller sieht im wesentlichen jetzt so aus:
- Code: Alles auswählen
$this->paginate['Immobilien'] = array(
'limit' => 2,
'conditions' => $conditions,
'group' => 'Immobilien.objektnummer
);
$eintraege = $this->paginate('Immobilien');
$this->set('Immobilien', $this->paginate('Immobilien'));
Im Model habe ich zwei Tabellen verbunden: anhaenge und freitexte was dann im Resultat für die Bestimmung der Anzahl Datensätze folgendes SQL-Statement ergibt:
- Code: Alles auswählen
SELECT COUNT( * ) AS `count`
FROM `immobilien` AS `Immobilien`
LEFT JOIN `immobilienart` AS `Immobilienart` ON ( `Immobilien`.`immobilienart` = `Immobilienart`.`id` )
LEFT JOIN `anhaenge` AS `Anhaenge` ON ( `Anhaenge`.`objektnummer` = `Immobilien`.`objektnummer` )
LEFT JOIN `freitexte` AS `Freitexte` ON ( `Freitexte`.`objektnummer` = `Immobilien`.`objektnummer` )
WHERE `Immobilien`.`plz` LIKE "%"
AND `Immobilien`.`immobilienart` =2
GROUP BY `Immobilien`.`objektnummer`
Wer sich etwas mit dem Operator Count() beschäftigt, merkt schnell, was hier nun das Problem ist.
Für die, die nicht wissen, was bei Count passiert, eine kurze Erklärung: Count fügt eine zusätzliche Spalte an das Ergebnis. In dieser wird die Anzahl gleicher Datensätze je Zeile gezählt. Für MySQL ist das auch gut hier erklärt.
Das Problem ist also, bedingt durch den Join, habe ich jetzt folgendes Ergebnis, wenn ich das mal mit phpMyAdmin mache:
COUNT
4
4
7
5
6
5
Richtig wäre ist das Ergebnis 6. Man sieht: Count mit verbundenen Tabellen ist eine heikle Sache.
Was bräuchte ich? In meiner alten Anwendung hatte ich zwei SQL-Statements: Eines mit Count() und GroupBy und eines für die "normale" Selektion. Wenn ich im paginator mit recursive -1 arbeiten würde, hätte ich das richtige Ergebnis. Allerdings brauche ich die anhaenge im View.
Ich denke, dass das in Cake auch möglich sein muss. Allerdings finde ich nicht die Lösung.
Hat jemand eine Idee?
Ciao Thomas