Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

sacar le % de dos campos de BD

Estas en el tema de sacar le % de dos campos de BD en el foro de Mysql en Foros del Web. hola tengo un problema tendo dos campos en una base de datos uno con los votos positivos y otro con los votos negativos, pero necesito ...
  #1 (permalink)  
Antiguo 10/11/2010, 08:41
 
Fecha de Ingreso: noviembre-2010
Ubicación: guayaquil, Ecuador
Mensajes: 20
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta sacar le % de dos campos de BD

hola tengo un problema tendo dos campos en una base de datos uno con los votos positivos y otro con los votos negativos, pero necesito mostrar las noticias que hecen referencia estos votos ordenadas desc segun el porciento (%) de votos positivos.

ayudenme por favor

puden escribirme a ***

Última edición por David; 10/11/2010 a las 09:06 Razón: No se permite solicitar ayuda por email
  #2 (permalink)  
Antiguo 10/11/2010, 08:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: sacar le % de dos campos de BD

No veo mucho el problema. El tema es que no puedes hacer un porcentaje sin antes saber el total de votos, por lo que para hacer el trabajo necesitas como mínimo dos consultas, una para conocer el total de votos y otra para usar ese dato en el cálculo.

Postea la estructura de las tablas para poder orientarte mejor.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/11/2010, 09:11
 
Fecha de Ingreso: noviembre-2010
Ubicación: guayaquil, Ecuador
Mensajes: 20
Antigüedad: 13 años, 5 meses
Puntos: 0
Pregunta Respuesta: sacar le % de dos campos de BD

hola la base de datos tiene varios campos pero los que necesito sacar el % en de los camo de nombre (positivo) y (negativo),

necesito sacar el porciento de positivos
  #4 (permalink)  
Antiguo 11/11/2010, 09:51
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: sacar le % de dos campos de BD

Buenos días jmgf74, el problema es que no tenemos idea de cómo es tu tabla ni como tienes almacenada tu información, es por eso que el compañero gnzsoloyo te pedía que pusieras la estructura de tu tabla, te voy a dar un ejemplo de cómo podrías hacerlo, pero te repito que depende de como tengas tu información.

Supongamos que tienes dos tablas, una tabla NOTICIAS y una tabla VOTOS más o menos así:

Código:
NOTICIAS
idNoticia|Descripcion
------------------------------
1|Noticia Uno
2|Noticia Dos

VOTOS
idVoto|idNoticia|valor
------------------------------
1|1|positivo
2|2|negativo
3|1|negativo
4|1|positivo
5|2|positivo
Esto quiere decir que la noticia Uno tiene 2 votos positivos y 1 negativo y la noticia Dos tiene 1 positivo y 1 negativo

Puedes hacer algo como esto:

Código MySQL:
Ver original
  1. idNoticia,
  2. 100*votos_positivos/total_Votos as Porcentaje_positivos,
  3. 100*votos_negativos/total_Votos as Porcentaje_negativos
  4. (
  5. idNoticia,
  6. sum(1) as total_votos,
  7. sum(case when voto = 'positivo' then 1 else 0 end) as votos_positivos,
  8. sum(case when voto = 'negativo' then 1 else 0 end) as votos_negativos
  9. from votos
  10. group by idNoticia
  11. ) T1

Esto te regresaría algo como esto
idNoticia|Porcentaje_positivos|Porcentaje_negativo s
--------------------------------------------------------------------
1|66.6667|33.3333
2|50.0000|50.0000

Saludos y espero que te pueda servir de algo el código
Leo
  #5 (permalink)  
Antiguo 11/11/2010, 10:37
 
Fecha de Ingreso: noviembre-2010
Ubicación: guayaquil, Ecuador
Mensajes: 20
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: sacar le % de dos campos de BD

mira dejame explicar y ante todo mil gracias por la ayuda que ustedes dan desde ahora seguro que yo lo valolare michisimo y se los dire a todos mi amigos del gremio.

la tabla de nombre (noticias) tiene varios campos ejemplo:
idn (id de la noticia)
titulo (titulo de la noticia)
img (imagen de la noticia)
Descripcion (texto de la noticia)
positivo (votos positivos o a favor)
negativo (votos negativo)

ahora los campos para sacar el % de votos positivos serian el campo positivo y el campo negativo.

que yo quiero hacer o que se me ocurrio, es agregar otro campo en la tabla que se llama votos a en el quiero almacenar el % de votos positivos asi puedo organizar las noticias segun el valor de este campo.

esa es mi idea las nuevas son muy bien venidas y de nuevo gracias
  #6 (permalink)  
Antiguo 11/11/2010, 10:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: sacar le % de dos campos de BD

Por lo que pareces decir, te refieres a obtener el porcentaje de votos negativos y positivos por cada noticia. Eso implica calcular simplemente el resultado por cada una de ellas, con forme lo que tienes en ese registro.
Porcentajes por cada idn:
Código MySQL:
Ver original
  1. titulo, img, Descripcion, ((positivo*100)/(positivo+negativo)) positivos,  ((negativo*100)/(positivo+negativo)) negativos
  2. FROM noticias
  3. ORDER BY positivos DESC, negativos DESC;

Cita:
que yo quiero hacer o que se me ocurrio, es agregar otro campo en la tabla que se llama votos a en el quiero almacenar el % de votos positivos asi puedo organizar las noticias segun el valor de este campo.
Ahora bien, una de las cosas que enseñan cuando cursas Bases de Datos es que no se deben almacenar datos calculables, es decir datos cuyo resultado se puede obtener al mismo tiempo que la consulta que se hace sobre los otros datos.
Es innecesario, redundante, y propenso a problemas de consistencia, ya que cuando se trata de datos que evolucionan a través del tiempo, debes incluir procesos de actualización constante que en realidad son superfluos.
Yo no te aconsejo hacer lo que dices precisamente porque esos porcentajes pueden variar en forma constante.
De hecho, ni siquiera es necesario almacenar esas sumas si ya tienes otra tabla que almacene los votos emitidos por los usuarios.
Obtener los acumulados y los porcentajes se puede hacer perfectamente cuando listas los temas (noticias) que han sido votados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 11/11/2010, 11:02
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: sacar le % de dos campos de BD

Hola de nuevo jmgf74 entonces, si entendí los DATOS de tu tabla pueden ser más o menos así:

Código:
idn|titulo|img|Descripcion|positivo|negativo
------------------------------------------------------
1|Titulo uno|img uno|Descripcion uno|30|5
2|Titulo dos|img dos|Descripcion dos|1|7
3|Titulo tres|img tres|Descripcion tres|10|4
Lo que tienes que hacer entonces es lo siguiente:

Código MySQL:
Ver original
  1. idn,
  2. titulo,
  3. 100 * positivo / (positivo + negativo) as porcentaje_positivos,
  4. 100 * negativo / (positivo + negativo) as porcentaje_negativos
  5. from noticias_votos

Si esto no es lo que quieres por favor pon algunos datos de ejemplo para poder afinar la consulta.

Saludos
Leo
  #8 (permalink)  
Antiguo 12/11/2010, 11:50
 
Fecha de Ingreso: noviembre-2010
Ubicación: guayaquil, Ecuador
Mensajes: 20
Antigüedad: 13 años, 5 meses
Puntos: 0
Exclamación Respuesta: sacar le % de dos campos de BD

hola el codigo me silvio y muchas gracias pero ahora tengo otro proble
ademas de ordenar las noticias por porciento positivos

al listarla y mostrarla muestro tambien el % calculado y la catidad de votos total de cada noticia.
  #9 (permalink)  
Antiguo 12/11/2010, 11:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: sacar le % de dos campos de BD

Cita:
Iniciado por jmgf74 Ver Mensaje
hola el codigo me silvio y muchas gracias pero ahora tengo otro proble
ademas de ordenar las noticias por porciento positivos

al listarla y mostrarla muestro tambien el % calculado y la catidad de votos total de cada noticia.
¿Y cuál es el problema? La respuesta cae de madura: (positivo+negativo) es el total, y se está usando ya en la sentencia.
Código MySQL:
Ver original
  1.       titulo,
  2.       img,
  3.       Descripcion, ((positivo*100)/(positivo+negativo)) positivos,  
  4.       ((negativo*100)/(positivo+negativo)) negativos,
  5.       (positivo+negativo) TotalVotos
  6. FROM noticias
  7. ORDER BY positivos DESC, negativos DESC;

Me parece que te estás ahogando en vasos de agua...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 12/11/2010, 12:01
 
Fecha de Ingreso: noviembre-2010
Ubicación: guayaquil, Ecuador
Mensajes: 20
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: sacar le % de dos campos de BD

ya encontre como mostrar el % pero necesito que solo me muestr los valores antes de la , o el .
  #11 (permalink)  
Antiguo 12/11/2010, 12:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: sacar le % de dos campos de BD

Cita:
Iniciado por jmgf74 Ver Mensaje
ya encontre como mostrar el % pero necesito que solo me muestr los valores antes de la , o el .
Explicate mejor, pero ten en cuenta que la base de datos sólo devuelve datos como DOUBLE, REAL o FLOAT. No es la base la que resuelve si mostrarlos con comas o puntos. Eso lo tienes que hacer en la interfase, es decir, en el formulario que usas para visualizarlo, y eso es asunto de programación, no de Bases de Datos.
Dependerá del lenguaje que uses para ello.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 12/11/2010, 12:20
 
Fecha de Ingreso: noviembre-2010
Ubicación: guayaquil, Ecuador
Mensajes: 20
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: sacar le % de dos campos de BD

si y tienes razon ya lo resolvi antes de la respuesta la verdad es que estaba como que dormido gracias ustedes son de gran ayuda de verdad los felicito por todo esto gracias
  #13 (permalink)  
Antiguo 16/01/2012, 18:16
 
Fecha de Ingreso: septiembre-2009
Mensajes: 402
Antigüedad: 14 años, 7 meses
Puntos: 6
Respuesta: sacar le % de dos campos de BD

excelente! esta es la formula que necesitaba! muchisimas gracias!

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Por lo que pareces decir, te refieres a obtener el porcentaje de votos negativos y positivos por cada noticia. Eso implica calcular simplemente el resultado por cada una de ellas, con forme lo que tienes en ese registro.
Porcentajes por cada idn:
Código MySQL:
Ver original
  1. titulo, img, Descripcion, ((positivo*100)/(positivo+negativo)) positivos,  ((negativo*100)/(positivo+negativo)) negativos
  2. FROM noticias
  3. ORDER BY positivos DESC, negativos DESC;


Ahora bien, una de las cosas que enseñan cuando cursas Bases de Datos es que no se deben almacenar datos calculables, es decir datos cuyo resultado se puede obtener al mismo tiempo que la consulta que se hace sobre los otros datos.
Es innecesario, redundante, y propenso a problemas de consistencia, ya que cuando se trata de datos que evolucionan a través del tiempo, debes incluir procesos de actualización constante que en realidad son superfluos.
Yo no te aconsejo hacer lo que dices precisamente porque esos porcentajes pueden variar en forma constante.
De hecho, ni siquiera es necesario almacenar esas sumas si ya tienes otra tabla que almacene los votos emitidos por los usuarios.
Obtener los acumulados y los porcentajes se puede hacer perfectamente cuando listas los temas (noticias) que han sido votados.
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 12:49.