Jag tycker att du borde GROUP BY a.id, c.id -- gruppering efter a.id betyder bara att du vanligtvis har flera c.id s per a.id , och du får bara en "random-ish" av dem. Detta verkar vara en fråga om grundläggande korrekthet. När du har fixat det, en initial SELECT COUNT(*) FROM etc etc bör då definitivt ge dig antalet rader som följande fråga kommer att returnera, så att du kan förbereda din personsökare därefter.