Idenya adalah menggunakan subquery untuk menghitung jumlah, kemudian melakukan perhitungan dan memasukkan nilainya ke dalam satu kolom yang dipisahkan koma, yang dapat Anda ubah menjadi array di 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;
EDIT:
Tabel dalam SQL secara inheren tidak berurutan dan pengurutan dalam SQL tidak stabil (artinya urutan aslinya tidak dipertahankan). Anda dapat menentukan pemesanan di group_concat()
penyataan. Misalnya, berikut ini akan mengurutkan hasil dengan 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;
Dan ini akan diurutkan berdasarkan peringkat tertinggi terlebih dahulu:
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings
Anda dapat membuat daftar lebih kompleks untuk menyertakan id
di dalamnya juga:
select v.ip,
group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings