Tôi chỉ chia sẻ phần truy vấn giải quyết các yêu cầu đầu tiên và thứ hai của bạn, giả sử rằng dữ liệu của bạn vẫn ở cùng một cấu trúc. Bạn có thể thêm các liên kết và các chi tiết cần thiết khác trong truy vấn của mình.
SELECT
myView.*,
CONCAT(REPLACE(REPLACE(group_concat(SUBSTRING(notification_message,9)),'</strong>',''),SUBSTRING_INDEX(notification_message,'>',-1),''), SUBSTRING_INDEX(notification_message,'>',-1)) AS Message
FROM
(SELECT DISTINCT
receiver_id,
notification_issuer,
notification_message,
notification_target,
notification_type
FROM imgzer_notifications
WHERE receiver_id = 9 and notification_seen = 1
ORDER BY notification_time DESC) myView
GROUP BY myView.receiver_id, myView.notification_target, myView.notification_type;
Tôi biết các hàm Chuỗi trông phức tạp, nhưng để đạt được đầu ra yêu cầu của bạn, bạn phải thử với các Chuỗi được tạo. Tôi đã sửa đổi tập dữ liệu của bạn trong SQL Fiddle một chút để kiểm tra đầu ra của tôi. Bạn có thể làm tương tự tại:
http://www.sqlfiddle.com/#!2/70a937/49
Hãy cho tôi biết trong trường hợp có một số tiêu chí khác cần được đáp ứng hoặc bất kỳ cải tiến nào bạn yêu cầu trong truy vấn.