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

Operar con campos en la misma consulta

Estas en el tema de Operar con campos en la misma consulta en el foro de Mysql en Foros del Web. Buenas, Estoy planteando un problema y no se si desde el propio MySQL se puede hacer o es mejor hacerlo desde la aplicación (PHP) para ...
  #1 (permalink)  
Antiguo 09/04/2011, 04:31
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Operar con campos en la misma consulta

Buenas,

Estoy planteando un problema y no se si desde el propio MySQL se puede hacer o es mejor hacerlo desde la aplicación (PHP) para tener mejor rendimiento.

Tengo una tabla con valores que me interesa sumar y comprobar si fue ganador o no respecto a otras dos columnas.

Ejemplo: Tengo cuatro campos

campo 1: 57
campo 2: 43
campo 3: 1
campo 4: 2


Me gustaria poder sumar el campo 3 y 4 y saber cual es su resultado, en función de este resultado se pueden dar dos acciones (un IF imagino)

(Si) las suma es menor de 2.5, corresponde al campo 1
(else) si es mayor de 2.5 , corresponde al campo 2.

Ahora que ya sé a que campo correspondería si al 1 o al 2, dependiendo de la suma, también necesito saber cual de los campos 1 o 2 es el más grande y si coincide con la selección anterior.

Ejemplo practico:

1) Sumo campo 3 y 4, (1+2 = 3)
2) 3 > 2,5 , sí, entonces campo 2
3) que campo es más grande (campo 1: 57 o campo 2: 42), el campo 1

Coincide el resultado de la operación 2) con la operación 3) sí entonces true, sino false.

Este problema es mejor resolverlo con mysql o desde el lado de la aplicación? en la base de datos hay más de 500.000 resultados.

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 09/04/2011, 06:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Operar con campos en la misma consulta

SELECT IF(IF(campo1 > campo2, 1,2) = IF(SUMA(campo3, campo4) < 2.5, 1,2)), 'true', 'false') resultado FROM tutabla

No lo he probado.
Por otra parte, yo haría esto con programación y no en la base de datos.
  #3 (permalink)  
Antiguo 09/04/2011, 07:35
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Operar con campos en la misma consulta

Cita:
Iniciado por jurena Ver Mensaje
SELECT IF(IF(campo1 > campo2, 1,2) = IF(SUMA(campo3, campo4) < 2.5, 1,2)), 'true', 'false') resultado FROM tutabla

No lo he probado.
Por otra parte, yo haría esto con programación y no en la base de datos.
Muchas gracias jurena,

No conseguí que funcionase, me da error de sinxtaxi

Código MySQL:
Ver original
  1. SELECT IF (IF(under > over, 1,2) = IF(SUM(FTL, FTV) < 2.5, 1,2), 'true', 'false') resultado FROM partidos

Pero, me interesaba saber también si creiais que era mejor por programación, y tu opinas que sí ;)

Lo ideal sería poder sacar la query SQL y ver ambos scripts a ver cual es más rápido, no consigo ver el fallo en la query, tu lo ves?

Edito:
He estado probando esta query simple y me también error de sintaxis, creo que aquí esta el problema

SELECT IF(SUM(FTL,FTV) < 2, 1,2), 'true', 'false') FROM partidos

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FTV) < 2, 1,2), 'true', 'false') FROM partidos' at line 1


Muchas gracias
  #4 (permalink)  
Antiguo 09/04/2011, 07:54
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Operar con campos en la misma consulta

Lo he conseguido finalmente

SELECT IF (IF(under > over, 1,2) = IF((FTL+FTV) < 2.5, 1,2), 'Acierto', 'Fallo') as resultado FROM partidos)

Me gustaria poder contar cuantos aciertos y fallos hubieron, imagino que se debe hacer con una consulta almacenada, sin embargo algo debo hacer mal porque me da error de sintaxis.....

Si no ando mal encaminado, creo que el nombre de la columna "resultado" no existe en la consulta principal, pero no se como solucionar eso

SELECT count(*) WHERE resultado = 'Acierto' FROM (SELECT IF (IF(under > over, 1,2) = IF((FTL+FTV) < 2.5, 1,2), 'Acierto', 'Fallo') as resultado FROM partidos)

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where resultado = 'Acierto' from (SELECT IF (IF(under > over, 1,2) = IF((FTL+FTV' at line 1

Alguna idea?

Muchas gracias
  #5 (permalink)  
Antiguo 09/04/2011, 12:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Operar con campos en la misma consulta

Intenta esto, y perdona el SUMA de antes, perdí la cabeza:

SELECT COUNT(*) TOTAL, IF (IF(under > over, 1,2) = IF((FTL+FTV) < 2.5, 1,2), 'Acierto', 'Fallo') as resultado FROM partidos GROUP BY resultado
  #6 (permalink)  
Antiguo 09/04/2011, 14:12
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Operar con campos en la misma consulta

Cita:
Iniciado por jurena Ver Mensaje
Intenta esto, y perdona el SUMA de antes, perdí la cabeza:

SELECT COUNT(*) TOTAL, IF (IF(under > over, 1,2) = IF((FTL+FTV) < 2.5, 1,2), 'Acierto', 'Fallo') as resultado FROM partidos GROUP BY resultado
Correctisimo jurena, fenomal

Sería posible agregar una columna más que fuese el porcentaje?

Antes de este hilo, hice una consulta sobre como sacar el porcentaje y me sugerieron usar variables para guardar los datos, tu que opinas? como lo podemos aplicar? es mejor usar otro método?
http://www.forosdelweb.com/f86/obten...8/#post3812205

Muchas gracias de antemano
  #7 (permalink)  
Antiguo 10/04/2011, 08:37
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Operar con campos en la misma consulta

Necesitas otra consulta para obtener el 100%. Pero es fácil:
SELECT COUNT(*) FROM partidos

De ahí obtendrás el 100%. Como en la anterior consulta obtienes el valor absoluto de Acierto y Fallo, te resultará fácil cargar en unas variables y obtener los porcentajes. Creo que es lo mejor, claro.

Etiquetas: campos
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 05:10.