Ý tưởng là sử dụng một truy vấn con để tính tổng, sau đó thực hiện phép tính và đặt các giá trị vào một cột được phân tách bằng dấu phẩy duy nhất, mà bạn có thể chuyển đổi thành một mảng trong 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;
CHỈNH SỬA:
Các bảng trong SQL vốn không có thứ tự và việc sắp xếp trong SQL không ổn định (nghĩa là thứ tự ban đầu không được giữ nguyên). Bạn có thể chỉ định một thứ tự trong group_concat()
bản tường trình. Ví dụ:phần sau sẽ sắp xếp các kết quả theo 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;
Và điều này sẽ sắp xếp theo xếp hạng cao nhất trước:
select v.ip, group_concat(v.visits / iv.maxvisits order by v.visits desc) as ratings
Bạn có thể làm cho danh sách phức tạp hơn để bao gồm id
trong đó cũng như:
select v.ip,
group_concat(concat(v.id, ':', v.visits / iv.maxvisits)) as ratings