La idea es usar una subconsulta para calcular la suma, luego hacer el cálculo y colocar los valores en una sola columna delimitada por comas, que puede transformar en una matriz en 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;
EDITAR:
Las tablas en SQL están intrínsecamente desordenadas y la clasificación en SQL no es estable (lo que significa que no se conserva el orden original). Puede especificar un orden en el group_concat()
declaración. Por ejemplo, lo siguiente ordenaría los resultados por 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;
Y esto estaría ordenado por la calificación más alta primero:
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings
Puede hacer que la lista sea más compleja para incluir el id
en él también:
select v.ip,
group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings