Die Idee ist, eine Unterabfrage zu verwenden, um die Summe zu berechnen, dann die Berechnung durchzuführen und die Werte in eine einzelne durch Kommas getrennte Spalte zu schreiben, die Sie in PHP in ein Array umwandeln können:
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;
BEARBEITEN:
Tabellen in SQL sind von Natur aus ungeordnet und die Sortierung in SQL ist nicht stabil (was bedeutet, dass die ursprüngliche Reihenfolge nicht beibehalten wird). Sie können eine Reihenfolge in group_concat()
angeben Aussage. Im Folgenden würden die Ergebnisse beispielsweise nach id
sortiert :
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;
Und dies würde zuerst nach der höchsten Bewertung sortiert:
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings
Sie können die Liste komplexer gestalten, indem Sie die id
enthalten auch darin:
select v.ip,
group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings