Daniel Petratsch: Mysql - Anzahl an Datensätzen in umfangreicher Abfrage ermitteln

Beitrag lesen

Hallo!

Ich möchte die DB-Zugriffe optimieren und so viele Abfragen wie nur möglich in einer zusammenfassen. Mein aktuelles Problem betrifft eine Blätterfunktion, die die Ausgabe limitiert und ich aber trotzdem alle Datensätze brauche um die Blätter-Links berechnen zu können:

Da einige Tabellen betroffen sind, hoffe ich dass es auch ohne der Darstellung der Struktur geht, würde gerne wissen ob es grundsätzlich möglich ist in folgender Abfrage _ALLE_ betroffenen Datensätze (ohne Berücksichtigung von LIMIT) auszulesen:

//----------------------------------->

SELECT
 a.id,
 count( a.id ) AS anzahl_ergebnisse,
 a.ueberschrift,
 a.preis,
 a.wohnflaeche,
 a.grundflaeche,
 a.zimmer,
 b.bezeichnung AS bezirk,
 c.bezeichnung AS objekttyp,
 c.id AS id_objekttyp,
 d.pfad AS bildpfad
FROM objekt AS a
INNER JOIN bezirk AS b ON ( a.id_bezirk = b.id )
INNER JOIN objekttyp AS c ON ( a.id_objekttyp = c.id )
LEFT JOIN bild AS d ON ( a.id = d.id_objekt )
WHERE a.sichtbarkeit =1
AND a.gueltig_bis >= NOW( )
AND (
 ISNULL(
 d.pfad
 )
OR d.sort = (
 SELECT MIN( d2.sort )
 FROM bild AS d2
 WHERE a.id = d2.id_objekt )
 )
AND (
 a.id_bezirk =1
 OR a.id_bezirk =2
 OR a.id_bezirk =3
 OR a.id_bezirk =4
 OR a.id_bezirk =5
 OR a.id_bezirk =6
 OR a.id_bezirk =7
 OR a.id_bezirk =8
 OR a.id_bezirk =9
 OR a.id_bezirk =10
 )
AND (
 a.id_objekttyp =1
 OR a.id_objekttyp =2
 OR a.id_objekttyp =3
 OR a.id_objekttyp =4
 OR a.id_objekttyp =5
 OR a.id_objekttyp =6
 OR a.id_objekttyp =7
 OR a.id_objekttyp =8
 OR a.id_objekttyp =9
 OR a.id_objekttyp =10
 OR a.id_objekttyp =11
)
AND (
 a.preis >= "500"
 AND a.preis <= "400000"
 )
AND (
  (
  a.wohnflaeche >= "0"
  AND a.wohnflaeche <= "500"
  )
 OR (
  a.grundflaeche >= "0"
  AND a.grundflaeche <= "500"
  )
 )
GROUP BY a.id
ORDER BY a.letzte_verlaengerung DESC
LIMIT 0 , 30

//----------------------------------->

Hier bekomme ich logischerweise pro Datensatz ein COUNT() von 1 zurück, da sich diese Funktion ja auf einen Tupel bezieht, ich würde gerne die Gesamtzahl aller gefundenen Datensätze in einer eigenen Spalte anhängen, ist das generell irgendwie möglich? Wenn nicht, muss ich nur für die Zählfunktion eine fast identische Abfrage definieren und die Performance wäre nahezu halbiert.

Vielen Dank und freundliche Grüße,
Daniel