Estoy desarrollando una galería en línea con votación y tengo una tabla separada para fotos y votos (para cada voto estoy almacenando el ID de la imagen y el ID del votante). Las tablas relacionadas de esta manera: PICTURE <--(1:n, using VOTE.picture_id)-- VOTE
. Me gustaría consultar la tabla de imágenes y ordenar la salida por número de votos. Esto es lo que hago:La paginación en SQL con LIMIT/OFFSET a veces resulta en duplicados en páginas diferentes
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 es diferente para diferentes páginas, por supuesto.
Sin embargo, hay imágenes con el mismo ID que se muestran en las diferentes páginas. Supongo que la razón es la clasificación, pero no se puede construir una mejor consulta, que no permitirá duplicados. ¿Alguien podría darme una pista?
¡Gracias de antemano!
Esto ayudó, ¡gracias! –