Pregunta

Así que lo que estoy realmente tratando de lograr es el filtro más votado en las historias. Las historias se guardan en una tabla, y todos los votos a otro.

Tengo esta declaración para obtener el orden de las columnas vid adecuado:

SELECT vid, COUNT(id) AS votecnt 
  FROM votes 
WHERE status = 1 
GROUP BY vid 
ORDER BY votecnt DESC

Y entonces tengo que filtrar los cuentos mismos, y quiero que el proceso será condenada tal y como son en la cláusula primera.

SELECT vid, body, timestamp 
  FROM stories 
WHERE lv = 1 
  AND status = 1

Lo que pasa es que es el orden que necesito, ya que la primera declaración no devuelve todas las filas que la segunda lo hace. Sería aún mejor, si la primera consulta sería ordenar la tabla por el estado = 1 cuenta en un primer momento, y luego el total de votos.

Alguna idea de cómo unirse a todo esto en una consulta SQL? O debería usar PHP en el medio?

¿Fue útil?

Solución

A menos que esté extremadamente mala interpretación de su estructura, una combinación sencilla debería funcionar bien:

SELECT stories.vid, body, timestamp, COUNT(votes.id) votecnt FROM stories
INNER JOIN votes ON stories.vid=votes.vid
WHERE stories.lv=1 AND stories.status=1
GROUP BY votes.vid
ORDER BY votecnt DESC

No estoy seguro de lo que entendemos por

Sería aún mejor, si la primera consulta sería ordenar la tabla por el estado = 1 cuenta en un primer momento, y luego el total de votos.

Debido a que su declaración donde sólo utiliza votos / historias que tienen el estado = 1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top