You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Wenn man die what-Option einer Suchanfrage manipuliert, dann funktioniert der automatische Count nicht mehr in jedem Fall. Es sind da einige Bedingungen, die abgefragt werden, bevor der Count gesetzt wird:
Die Count-Abfrage wird in meinem Fall nur dann durchgeführt, wenn die what-Option schon ein COUNT( enthält. Ist das nicht verkehrt? Müsste das nicht genau andersrum sein? Denn so wird doch die Zähl-Query in eine weitere Zählquery verpackt?
The text was updated successfully, but these errors were encountered:
Gute Frage,
ich hatte das damals in bce8d64 implementiert und später mit @hannesbochmann sehr lange durch diskutiert. Die Option wurde dann anschließend deaktivierbar gemacht.
Die Abfrage an der stelle ist schon richtig, denn vorher war es so, das der COUNT nicht funktionierte, wenn im what der Options bereits ein COUNTvorhanden war. Deshalb wird die Query nochmal in eine Subquery gepackt, um die korrekten Anzahl zu ermitteln.
Dein Problem liegt in der tx_rnbase_util_SearchBase::getWhat Methode. Der COUNT wird nur gebildet, wenn kein what in den Options gesetzt ist.
Was würde passieren, wenn die abfrage nach COUNT( im what der Options entfernt werden würde?
Die Subquery würde immer erzeugt werden. Das wird mit Sicherheit hier und da zu Problemen führen. Niemand weiß in welchen Projekten über das what skurrile Abfragen gebaut werden, die dann nicht mehr gehen. Beispielsweise über mehrere Tabellen oder über eine weitere Subquery. Genau deswegen ist die Abfrage da drin.
Ein Workaround für dich ist, das COUNT(*) as cnt mit in dein what aufzunehmen, und in den Options das count zu entfernen
Andernfalls müsste die komplette count thematik neu überdacht und implementiert werden.
Noch zur Erklärung, warum eine Count Query in eine weitere verpackt werden muss, hier ein Beispiel:
Eine Tabelle mit Statistiken. Für jeden View einer News wird beispielsweise ein Datensatz mit der News-ID angelegt.
Im View für die Statistiken möchte ich natürlich pro News-Id die Gesamtanzahl an Views haben, weshalb der what auf *, COUNT(STATS.news_id) as views gesetzt wird. Damit habe ich alle Felder plus die Summe aller View Datensätze.
Für Funktionalitäten wie Pagebrowser etc, ist allerdings ein zusätzlicher Count nötig, der genau mit bce8d64 möglich wurde. Die Statistiken sind jetzt nur ein Beispiel von Vielen.
Wenn man die what-Option einer Suchanfrage manipuliert, dann funktioniert der automatische Count nicht mehr in jedem Fall. Es sind da einige Bedingungen, die abgefragt werden, bevor der Count gesetzt wird:
rn_base/util/class.tx_rnbase_util_SearchBase.php
Lines 304 to 318 in e9693b9
Die Count-Abfrage wird in meinem Fall nur dann durchgeführt, wenn die what-Option schon ein COUNT( enthält. Ist das nicht verkehrt? Müsste das nicht genau andersrum sein? Denn so wird doch die Zähl-Query in eine weitere Zählquery verpackt?
The text was updated successfully, but these errors were encountered: