Het idee is om een subquery te gebruiken om de som te berekenen, vervolgens de berekening uit te voeren en de waarden in een enkele door komma's gescheiden kolom te plaatsen, die u in php kunt omzetten in een array:
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;
BEWERKEN:
Tabellen in SQL zijn inherent ongeordend en het sorteren in SQL is niet stabiel (wat betekent dat de oorspronkelijke volgorde niet behouden blijft). U kunt een volgorde opgeven in de group_concat()
uitspraak. Het volgende zou bijvoorbeeld de resultaten sorteren op 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;
En dit zou eerst op de hoogste beoordeling worden gerangschikt:
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings
U kunt de lijst complexer maken door de id
. op te nemen er ook in:
select v.ip,
group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings