Ideen er at bruge en underforespørgsel til at beregne summen, derefter lave beregningen og sætte værdierne i en enkelt kommasepareret kolonne, som du kan transformere til en matrix 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 er i sagens natur uordnet, og sortering i SQL er ikke stabil (hvilket betyder, at den oprindelige rækkefølge ikke er bevaret). Du kan angive en rækkefølge i group_concat()
udmelding. For eksempel vil følgende sortere resultaterne 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;
Og dette ville sortere efter den højeste vurdering først:
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings
Du kan gøre listen mere kompleks for at inkludere id
også i den:
select v.ip,
group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings