reset lượt thi
- Sao chép liên kết
- Chia sẻ với Facebook
- Chia sẻ với X
- Chia sẻ với Pinterest
- Chia sẻ với Linkedin
- Gửi bài qua Email
gửi email cho tác giả
trở lại web thi trắc nghiệm. dùng code sql reset số lần thi như nào
Để reset số lần thi trực tiếp bằng lệnh SQL (ví dụ bạn thao tác qua phần mềm quản lý như pgAdmin, DBeaver hoặc Terminal), bạn cần thực hiện xóa dữ liệu tương ứng trong bảng cơ sở dữ liệu exam_sessions_v2.
Hệ thống của bạn tính số lượt đã thi bằng cách đếm số dòng bản ghi của thí sinh đó, nên khi bạn dùng câu lệnh DELETE, số lượt thi sẽ tự động được hạ xuống (reset).
Dưới đây là các câu lệnh SQL cụ thể theo từng nhu cầu của bạn:
1. Reset 1 lượt thi cụ thể (Dựa vào ID phiên thi)
Nếu bạn đã biết mã ID (id) của lượt làm bài đó (ví dụ hiển thị trên trang quản lý), đây là cách an toàn và chuẩn xác nhất:
-- Bước 1: Xóa các câu hỏi chi tiết của lượt thi đó để tránh lỗi ràng buộc khóa ngoại (Foreign Key)
DELETE FROM exam_details_v2 WHERE session_id = 123;
-- Bước 2: Xóa phiên thi chính để khôi phục lượt cho thí sinh
DELETE FROM exam_sessions_v2 WHERE id = 123;
(Thay 123 bằng ID thực tế của phiên thi bạn muốn xóa)
2. Reset lượt thi của một thí sinh theo Số báo danh (SBD) và Đề tài
Trường hợp thí sinh có Số báo danh cụ thể (ví dụ: SBD005) bị hết lượt thi (đã làm 3 lần) ở một đề tài nhất định (ví dụ: Automation) và bạn muốn cho họ thi lại đề tài đó:
-- Bước 1: Xóa dữ liệu chi tiết của thí sinh này ở đề tài đó trước
DELETE FROM exam_details_v2
WHERE session_id IN (
SELECT id FROM exam_sessions_v2 WHERE sbd = 'SBD005' AND category = 'Automation'
);
-- Bước 2: Xóa các phiên thi tổng quan
DELETE FROM exam_sessions_v2
WHERE sbd = 'SBD005' AND category = 'Automation';
3. Reset TOÀN BỘ các lượt thi của một thí sinh (Cho thi lại tất cả các đề)
Nếu bạn muốn xóa sạch lịch sử, cho thí sinh đó làm lại từ đầu đối với mọi đề tài trong hệ thống:
-- Bước 1: Xóa toàn bộ câu hỏi chi tiết của thí sinh dựa theo SBD
DELETE FROM exam_details_v2
WHERE session_id IN (
SELECT id FROM exam_sessions_v2 WHERE sbd = 'SBD005'
);
-- Bước 2: Xóa toàn bộ các phiên thi của thí sinh đó
DELETE FROM exam_sessions_v2
WHERE sbd = 'SBD005';
4. Reset toàn bộ hệ thống (Xóa hết kết quả của tất cả mọi người để tổ chức thi mới)
Nếu kỳ thi thử đã kết thúc, bây giờ bạn muốn dọn sạch cơ sở dữ liệu về 0 để chuẩn bị cho một cuộc thi chính thức mới:
-- Xóa toàn bộ dữ liệu ở cả 2 bảng (Dùng lệnh TRUNCATE sẽ nhanh và sạch hơn DELETE)
TRUNCATE TABLE exam_details_v2 RESTART IDENTITY CASCADE;
TRUNCATE TABLE exam_sessions_v2 RESTART IDENTITY CASCADE;
(Cụm RESTART IDENTITY giúp reset các cột ID tự động tăng về số 1 ban đầu).
⚠️ Lưu ý quan trọng: Trước khi chạy các lệnh
DELETEhoặcTRUNCATEtrên cơ sở dữ liệu thật, bạn nên sao lưu (Backup) dữ liệu hoặc kiểm tra kỹ điều kiệnWHEREđể tránh xóa nhầm dữ liệu của các thí sinh khác.
http://14.241.67.161:9000/admin/detail/7 số 7 là id ak
Chính xác bạn nhé! Số 7 ở cuối đường dẫn đó chính là id của phiên làm bài thi (hay còn gọi là session_id).
Khi bạn bấm vào một dòng trên giao diện quản trị, hệ thống Flask sẽ bóc tách số 7 này ra từ URL để truyền vào biến sid trong đoạn code Python của bạn:
@app.route("/admin/detail/<int:sid>")
def admin_detail(sid):
# Lúc này sid = 7
Từ số 7 này, hệ thống sẽ thực hiện các câu lệnh SQL để truy vấn thông tin:
Vào bảng
exam_sessions_v2tìm dòng cóid = 7để lấy ra Tên thí sinh, Số báo danh, Tên đề tài, Điểm số, Thời gian nộp...Vào bảng
exam_details_v2tìm tất cả các dòng cósession_id = 7để hiển thị chi tiết từng câu hỏi mà thí sinh đó đã chọn đáp án đúng hay sai.
Tương tự như vậy, đối với chức năng Reset lượt thi mà bạn vừa cấu hình, khi bạn gọi đến link /admin/reset_attempts/7, hệ thống sẽ hiểu ngay là cần dọn dẹp và xóa bỏ toàn bộ dữ liệu của phiên thi số 7 này để thí sinh đó được cấp lại lượt làm bài.

