Tôi đang phát triển một thư viện trực tuyến có biểu quyết và có một bảng riêng cho ảnh và phiếu bầu (đối với mỗi phiếu bầu tôi lưu trữ ID của ảnh và ID của cử tri). Các bảng có liên quan như thế này: PICTURE <--(1:n, using VOTE.picture_id)-- VOTE
. Tôi muốn truy vấn bảng hình ảnh và sắp xếp đầu ra theo số phiếu bầu. Đây là những gì tôi làm:Phân trang trong SQL với LIMIT/OFFSET đôi khi dẫn đến trùng lặp trên các trang khác nhau
SELECT
picture.votes_number,
picture.creation_date,
picture.author_id,
picture.author_nickname,
picture.id,
picture.url,
picture.name,
picture.width,
picture.height,
coalesce(anon_1."totalVotes", 0)
FROM picture
LEFT OUTER JOIN
(SELECT
vote.picture_id as pid,
count(*) AS "totalVotes"
FROM vote
WHERE vote.device_id = <this is the query parameter> GROUP BY pid) AS anon_1
ON picture.id = anon_1.pid
ORDER BY picture.votes_number DESC
LIMIT 10
OFFSET 0
OFFSET khác với các trang khác nhau, tất nhiên.
Tuy nhiên, có những hình ảnh có cùng ID được hiển thị trên các trang khác nhau. Tôi đoán lý do là phân loại, nhưng không thể xây dựng bất kỳ truy vấn nào tốt hơn, điều này sẽ không cho phép trùng lặp. Ai có thể cho tôi một gợi ý?
Cảm ơn trước!
Điều này đã giúp, cảm ơn! –