Commit 3d67b965 authored by Mahmoud Aglan's avatar Mahmoud Aglan

fix(archive): resolve ONLY_FULL_GROUP_BY SQL error

Replace GROUP BY with correlated subqueries for snapshot data.
MySQL strict mode requires all SELECT columns in GROUP BY.
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent 7c243c3e
......@@ -47,7 +47,7 @@ class MemberArchiveController extends Controller
$params[] = $filters['date_to'] . ' 23:59:59';
}
if ($filters['number'] !== '') {
$where[] = "(a.membership_number = ? OR m.membership_number = ?)";
$where[] = "(m.membership_number = ? OR EXISTS (SELECT 1 FROM archive_snapshots sa WHERE sa.entity_type = 'members' AND sa.entity_id = m.id AND sa.membership_number = ?))";
$params[] = $filters['number'];
$params[] = $filters['number'];
}
......@@ -72,20 +72,19 @@ class MemberArchiveController extends Controller
$offset = ($page - 1) * $perPage;
$countSql = "SELECT COUNT(*) as total FROM members m
LEFT JOIN archive_snapshots a ON a.entity_type = 'members' AND a.entity_id = m.id
LEFT JOIN employees e ON e.id = m.archived_by
WHERE {$whereClause}";
$total = (int) ($db->selectOne($countSql, $params)['total'] ?? 0);
$sql = "SELECT m.id, m.full_name_ar, m.national_id, m.phone_mobile, m.membership_type, m.status,
m.archived_at, m.archived_by,
a.membership_number as archived_membership_number, a.snapshot_reason, a.id as snapshot_id,
(SELECT sa.membership_number FROM archive_snapshots sa WHERE sa.entity_type = 'members' AND sa.entity_id = m.id ORDER BY sa.snapshot_taken_at DESC LIMIT 1) as archived_membership_number,
(SELECT sa.snapshot_reason FROM archive_snapshots sa WHERE sa.entity_type = 'members' AND sa.entity_id = m.id ORDER BY sa.snapshot_taken_at DESC LIMIT 1) as snapshot_reason,
(SELECT sa.id FROM archive_snapshots sa WHERE sa.entity_type = 'members' AND sa.entity_id = m.id ORDER BY sa.snapshot_taken_at DESC LIMIT 1) as snapshot_id,
e.full_name_ar as operator_name
FROM members m
LEFT JOIN archive_snapshots a ON a.entity_type = 'members' AND a.entity_id = m.id
LEFT JOIN employees e ON e.id = m.archived_by
WHERE {$whereClause}
GROUP BY m.id
ORDER BY m.archived_at DESC
LIMIT {$perPage} OFFSET {$offset}";
$rows = $db->select($sql, $params);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment