Foros del Web » Programando para Internet » PHP »

ordenar articulos segun votaciones a favor o en contra

Estas en el tema de ordenar articulos segun votaciones a favor o en contra en el foro de PHP en Foros del Web. Buenas, os expongo una gran duda, gracias de antemano por leerla: Estoy intentando mostrar una lista de artículos por su popularidad (mediante votaciones). Para explicaros ...
  #1 (permalink)  
Antiguo 23/08/2011, 11:31
 
Fecha de Ingreso: febrero-2011
Mensajes: 48
Antigüedad: 8 años, 9 meses
Puntos: 0
ordenar articulos segun votaciones a favor o en contra

Buenas, os expongo una gran duda, gracias de antemano por leerla:

Estoy intentando mostrar una lista de artículos por su popularidad (mediante votaciones). Para explicaros mi duda obviare los detalles innecesarios y lo expondré como un ejemplo:

Digamos que tengo dos tablas en la base de datos.
Una, la de unos artículos, cuyos campos son: la "id" y el "nombre".
Y otra, la de los votaciones cuyos campos son: la "id", la foranea "id_articulo" y el "voto" (que puede ser solamente S ó N, que significan: me gusta o no me gusta). Y ya esta.

Mi duda es como mostrar una lista ordenada de articulos (ascendente o descendente, da igual), segun el numero de "S" o "N" (votos) que hayan recibido.

Mi duda consiste basicamente en, ¿como mostrar: en primer lugar los articulos con mayor numero de votos "S", luego de estos, los articulos sin voto alguno, y en último lugar los articulos con mayor numero de votos "N"?

Hasta donde yo he podido llegar es a crear esta query en una funcion, ubicada en una libreria, que mas tarde invoco:

Código PHP:
function muestrame_articulos($voto){ //        $voto= "S"; (por ejemplo)
    
$link conexion();
    
$query "SELECT count(votaciones.voto) AS score, articulos.* FROM votaciones INNER JOIN articulos ON votaciones.id_articulo = articulos.id WHERE votaciones.voto='$voto'";
    
$rs mysql_query($query$link);
    
$resultado= array();
    
$row mysql_fetch_assoc ($rs);
    while (
$row != false) {
        
$resultado[] = $row;
        
$row mysql_fetch_assoc ($rs);
    }
    return 
$resultado
luego invoco esta funcion:
Código PHP:
    $voto"S";
    
$resultadomuestrame_articulos($voto);
    foreach(
$resultado as $item){
    echo (
"<span>"$item['nombre'] ." - "$item['score'] ." votos</span><br/>");
    } 
Pero lo que esto me ofrece es tan solo un resultado, que curiosamente es el que mas votos "S" tiene en mi ejercicio, y al lado me sale la suma de todos los votos "S" (pero de todos los articulos, no del que se muestra en el resultado de mi ejercicio). Algo así como:

Código HTML:
Articulo X lo que sea - 20 votos
Obviamente, mi interes es mostrar, en principio, todos los articulos de mi base de datos, y a su lado el numero de sus votos "S" (o "N", cuando se cambie en la variable $voto). En principio el orden ascendente o descendente es irrelevante. Solo necesito listar todos los articulos y a su lado el numero de votos respectivos.
Alguna ayuda?
Muchas Gracias
  #2 (permalink)  
Antiguo 23/08/2011, 11:36
 
Fecha de Ingreso: agosto-2010
Mensajes: 10
Antigüedad: 9 años, 4 meses
Puntos: 2
Respuesta: ordenar articulos segun votaciones a favor o en contra

Primero tendrías que preparar la query para que te liste todos los resultados, con el número de votos sin ordenar. Una vez tengas esto, lo que necesitas es hacer un order by.

Según tu consulta, supongo que sería algo como "ORDER BY `score` ASC" (o DESC, según cómo quieras ordenarlo).

Espero que te valga de ayuda, es la primera vez que contesto a alguien en este foro creo xD (aunque si no te sirve, tal vez deberías mover el tema a alguna categoría de bases de datos o SQL, es más adecuado).

¡Saludos!
  #3 (permalink)  
Antiguo 23/08/2011, 12:23
 
Fecha de Ingreso: febrero-2011
Mensajes: 48
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: ordenar articulos segun votaciones a favor o en contra

Claro claro! pero es que ahora no me sale como listar todos los resultados con el numero de votos respectivos. Lo de ordenar luego es lo de menos.

Y eso de mover el tema no se como se hace. Tal vez sugieres que inicie un nuevo post en el foro de MySQL?

Alguna ayuda para la query??
  #4 (permalink)  
Antiguo 23/08/2011, 13:51
 
Fecha de Ingreso: agosto-2010
Mensajes: 10
Antigüedad: 9 años, 4 meses
Puntos: 2
Respuesta: ordenar articulos segun votaciones a favor o en contra

Código MySQL:
Ver original
  1. WHERE votaciones.voto='$voto'

¿No estás seleccionando sólamente los que tengan voto = X? Prueba a quitar el WHERE (o haz un WHERE *)
  #5 (permalink)  
Antiguo 23/08/2011, 14:10
 
Fecha de Ingreso: febrero-2011
Mensajes: 48
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: ordenar articulos segun votaciones a favor o en contra

si, (tal vez me he liado antes bastante con el ejemplo) mi interes es:

Yo quiero mostrar una lista de todos los articulos (hasta ahi es facil de hacer, evidentemente). Pero estoy buscando una query (cruzada o como sea) que me añada, en cada articulo de la lista el numero de votos X que se le han otorgado ("S" o "N", especificado en $voto, pero solo los "S" ó los "N", en cuanto se consulte).

Actualmente acabo de probar esta query:

$query = "SELECT count(votaciones.voto='$voto') as score, articulos.* FROM votaciones INNER JOIN articulos ON votaciones.id_articulo = articulo.id";

Pero solo me sigue mostrando un solo articulo, y a su lado la suma de todos los votos "S" de cada articulo.
Y ya no se que hacer! Tiene pinta de ser algo sencillo!

Gracias por ayudar Patonsky1 :)


PD. Por ejemplo.

"La camiseta de color lila ha recibido 34 votos positivos y 12 negativos".
"Los pantalones azules ha recibido 23 votos positivos y 7 negativos".
"La bufanda naranja ha recibido 13 votos positivos y 15 negativos".
...
etc,

Pues querria mostrarlo asi:

$votos= "S";

"Camiseta lila", 34
"Pantalones azules", 23
"Bufanda naranja", 13
...
etc,

O asi:

$votos="N";

"Camiseta lila", 12
"Pantalones azules", 7
"Bufanda naranja", 15
...
etc,

Última edición por Swivel; 23/08/2011 a las 14:20
  #6 (permalink)  
Antiguo 23/08/2011, 14:40
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 13 años, 7 meses
Puntos: 11
Respuesta: ordenar articulos segun votaciones a favor o en contra

Para hacer que te salga el número de votos de cada artículo, creo que deberías haberlo puesto todo en la misma tabla en vez de haberlo dividido.

Ya que de esa forma, agregas 2 campos más a la tabla, uno vpositivo y el otro vnegativo por ejemplo.

Después poner un botón en cada artículo que se esté mostrando que de un +1 al valor de cada una de esas celdas.
  #7 (permalink)  
Antiguo 23/08/2011, 14:54
 
Fecha de Ingreso: febrero-2011
Mensajes: 48
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: ordenar articulos segun votaciones a favor o en contra

Gracias Malekith, es otra manera de hacerlo.

Actualmente acabo de hacer un progreso con la siguiente query:

$query = "SELECT count(votaciones.voto='$voto') as score, articulos.* FROM votaciones INNER JOIN articulos ON votaciones.id_articulo = articulos.id GROUP BY id_articulo";

Lo que me muestra ahora si, una lista de todos los articulos que han recibido cualquier tipo de voto, y a su lado la suma de todos los votos de cualquier tipo tambien.
Por cierto, donde dice "SELECT count(votaciones.voto='$voto')..."; Lo que esta en negrita parece no darle importancia, porque muestra los mismos resultados si lo quito.

En fin, casi podria quedarme con esto y olvidarme de hacer una lista de popularidad, por una de polémica (por lo del numero de votos a favor y en contra...)

Alguna otra idea?
Gracias!

Etiquetas: mysql, tabla, votos, votacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:08.