Kan du inte bara köra count/group såhär?
select pid, count(*) as antalentries from table
group by pid
order by antalentries desc
Då får du ju en sammanställning på hur många entries varje pid har, sorterat nedåtgående på antal entries. Är inte 100 på att "order by antalentries desc" fungerar i MySQL, men såifall får man nöja sig med de två första raderna och sedan sortera manuellt i en array. Är ju dumt att köra flera statements när man kan göra det med ett.