Chodzi o to, aby użyć podzapytania do obliczenia sumy, a następnie wykonać obliczenia i umieścić wartości w pojedynczej kolumnie oddzielonej przecinkami, którą można przekształcić w tablicę w 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;
EDYCJA:
Tabele w SQL są z natury nieuporządkowane, a sortowanie w SQL nie jest stabilne (co oznacza, że oryginalna kolejność nie jest zachowana). Możesz określić kolejność w group_concat()
oświadczenie. Na przykład poniższe uporządkowałoby wyniki według 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;
A to by było najpierw uporządkowane według najwyższej oceny:
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings
Możesz uczynić listę bardziej złożoną, aby zawierała id
w nim również:
select v.ip,
group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings