Tanken är att använda en underfråga för att beräkna summan, sedan göra beräkningen och lägga in värdena i en enda kommaavgränsad kolumn, som du kan omvandla till en array i php:
select v.ip, group_concat(v.visits / iv.maxvisits) as ratings
from visit v join
(SELECT ip, id, visits, max(visits) as maxvisits
FROM visit
GROUP BY ip
) iv
on v.ip = iv.ip
group by v.ip;
EDIT:
Tabeller i SQL är i sig oordnade och sortering i SQL är inte stabil (vilket innebär att den ursprungliga ordningen inte bevaras). Du kan ange en ordning i group_concat()
påstående. Till exempel skulle följande ordna resultaten efter id
:
select v.ip, group_concat(v.visits / iv.maxvisits order by id) as ratings
from visit v join
(SELECT ip, id, visits, max(visits) as maxvisits
FROM visit
GROUP BY ip
) iv
on v.ip = iv.ip
group by v.ip;
Och detta skulle sorteras efter högsta betyg först:
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings
Du kan göra listan mer komplex för att inkludera id
i den också:
select v.ip,
group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings