L'idea è di utilizzare una sottoquery per calcolare la somma, quindi eseguire il calcolo e inserire i valori in un'unica colonna delimitata da virgole, che puoi trasformare in un array in 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;
MODIFICA:
Le tabelle in SQL sono intrinsecamente non ordinate e l'ordinamento in SQL non è stabile (il che significa che l'ordine originale non viene mantenuto). Puoi specificare un ordinamento in group_concat()
dichiarazione. Ad esempio, quanto segue ordinerebbe i risultati in base a 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;
E questo ordinerebbe per primo il punteggio più alto:
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings
Puoi rendere l'elenco più complesso per includere l'id
anche in esso:
select v.ip,
group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings