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

if dentro de mysql

Estas en el tema de if dentro de mysql en el foro de Mysql en Foros del Web. Hola es la primera vez que quiero hacer esto y no se muy bien como es... tengo una consulta mysql, hasta ahi todo normal, pero ...
  #1 (permalink)  
Antiguo 17/08/2012, 09:02
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 6 meses
Puntos: 3
Exclamación if dentro de mysql

Hola es la primera vez que quiero hacer esto y no se muy bien como es...

tengo una consulta mysql, hasta ahi todo normal, pero quiero que meta una variable segun que valor tenga la tabla en cuestion

Código PHP:
Ver original
  1. $searchFocus= "anuncios WHERE valor= IF( moneda = EUR, $valor , si_no_otro_if...hasta que encaje el valor de moneda)";

de manera, y esto es lo que no se si es asi... quedase interpretado asi:

Código PHP:
Ver original
  1. $searchFocus= "anuncios WHERE valor=EUR";

es posible????

toda luz que podais arrojar es bienvenida!!!!
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #2 (permalink)  
Antiguo 17/08/2012, 09:31
 
Fecha de Ingreso: enero-2012
Ubicación: Caracas
Mensajes: 75
Antigüedad: 12 años, 2 meses
Puntos: 21
Respuesta: if dentro de mysql

creo que te refieres a esto:

Código PHP:
Ver original
  1. switch($valor){
  2.    case '1': $valor_condicion = 'EUR'; break;
  3.    .
  4.    .
  5.    .
  6.    default: 'otro'
  7. }
  8. $searchFocus= "anuncios WHERE valor=$valor_condicion ";
  #3 (permalink)  
Antiguo 17/08/2012, 10:12
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 6 meses
Puntos: 3
Respuesta: if dentro de mysql

Gracias por responder, si es algo asi, pero quisiera hacerlo dentro de la propia consulta mysql, es decir, tengo 2 tablas:

de la primera tabla, saco el valor en euros y lo convierto a todas las monedas que interpreta la web,

y en la tabla dos ,quiero que me diga en que moneda esta cada resultado del while y que vaya cogiendo la variable correspondiente de la primera tabla... he leido algo al respecto pero no me aclaro con la sintaxis, si pudiese ver un ejemplo lo entenderia perfect... dejo el link del articulo que me ha insipirado!


http://blog.juegosocio.com/if-en-consultas-mysql.html

tambien he leido aqui, y se que se pueden hacer "mayor que" o "menor que" pero no dice nada sobre lo que me interesa que es el "igual que"

referencia -> https://dev.mysql.com/doc/refman/5.5...functions.html
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #4 (permalink)  
Antiguo 17/08/2012, 10:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: if dentro de mysql

quizás no te haga ni falta; pon algún ejemplo con datos concretos, aunque sean inventados de lo que tienes en cada tabla y cómo quieres que salga.
  #5 (permalink)  
Antiguo 17/08/2012, 11:16
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 6 meses
Puntos: 3
Respuesta: if dentro de mysql

voy...


primera tabla:


Código PHP:
Ver original
  1. $sql = "SELECT * FROM  afiliados WHERE nombre='$nombre'";
  2. $consulta = mysql_query($sql) or die ("No se pudo ejecutar la consulta");
  3. While ($registro=mysql_fetch_array($consulta))
  4. {
  5. $ciudad=$registro["ciudad"];
  6. $provincia=$registro["provincia"];
  7. $pais=$registro["pais"];
  8. $disponible=$registro["disponible"];
  9. $presupuesto=$registro["presupuesto"];
  10. $moneda=$registro["moneda"];   
  11. }

le meto unos if para testar esas variables y despues cargar la siguiente mysql


Código PHP:
Ver original
  1. if($disponible==1 || $disponible==4)
  2. {
  3. $disponibleZona="pais='$pais'";
  4. }
  5. else
  6. {
  7.     if($disponible==2)
  8.     {
  9.     $disponibleZona="ciudad='$ciudad'";
  10.     }
  11.     else
  12.     {
  13.         if($disponible==3)
  14.         {
  15.         $disponibleZona="provincia='$provincia'";
  16.         }
  17.         else
  18.         {
  19.             if($disponible==5)
  20.             {
  21.             $disponibleZona="pais<>''";
  22.             }
  23.             else
  24.             {
  25.             }
  26.         }  
  27.     }
  28. }

convierto el presupuesto de la moneda en la que este el usuario, ponle euros a todas las monedas de la pagina, ponle a dolares... y le saco una variable para cada uno, por ejemplo:

$presupuesto_dolares="lo_que_sea";
$presuepuesto_yenes="lo_que_sea";
etc...

y AQUI ES DONDE VIENE EL PROBLEMA le digo que para que seleccione de la base de datos el presupuesto del proyecto tiene que ser mayor o igual que el presupuesto minimo que el usuario a determinado en la primera tabla:

Código PHP:
Ver original
  1. if($budget=='')
  2. {
  3. $budgetZone="";
  4. }
  5. else
  6. {
  7. $budgetZone="AND budget >='$budget'";
  8. }

estas variables se cargan despues en la segunda consulta:

lo que tendria que hacer es algo asi como:
lo pongo sin resaltar para marcar lo que me interesa...

if($presupuesto=='')
{
$presupuestoZona="";
}
else
{
$presupuestoZona="AND budget >='if(moneda=USD,$presupuesto_dolares,si_no_otro_if, y asi hasta que encaje...)'
}


notese que lo marcado en verde moco es una condicion que se esta consultando a la sengunda tabla en tiempo real, lo azul es la variable que cargamos antes y todo junto (rojo+verde_moco+azul) es lo que quiero hacer...

ahora pongo la segunda tabla con todas las variables cargadas:

Código PHP:
Ver original
  1. $focodebusqueda= "anuncios WHERE $disponibleZona $presupuestoZona";
  2.  
  3.  
  4. mysql_query ("SET NAMES utf8");
  5. mysql_query("mysql_set_charset_name(&mysql, 'utf8')");
  6. $todos = "select count(*) as num from $focodebusqueda ";
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #6 (permalink)  
Antiguo 17/08/2012, 11:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: if dentro de mysql

protoameeba,
ese código es código PHP que no debemos incluir en este foro. Lo que yo te pido es la lógica, las tablas, los nombres de las tablas y los campos y las estructuras. Me explicaré. Para comparar precios de distintas monedas tendrías que usar una moneda como referencia, por ej. euro o dólar, por decir algo. Deberías tener en una tabla todos los valores de esas monedas de los clientes en euro o dolar. Luego al hacer la oferta tú podrías perfectamente con un inner join traerte el valor correspondiente en la moneda que quieras, o tal vez, convertir el valor de la moneda que te llega en euros y comparar. No sé si lo he entendido bien.
  #7 (permalink)  
Antiguo 17/08/2012, 12:52
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 6 meses
Puntos: 3
Respuesta: if dentro de mysql

Hola, gracias por responder, los valores de las monedas los saco por php y obteniendo la informacion del xml que genera y actualiza constantemente el banco central europeo... el usuario define su cache y escoge de entre las monedas que genera el xml del BCE la suya yo despues obtengo el resultado exacto, vamos que no va por basededatos... :(
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #8 (permalink)  
Antiguo 17/08/2012, 13:27
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: if dentro de mysql

Si el Banco Central Europeo te ofrece el contravalor en euros de cada moneda, pues ya lo tienes, ¿no? En la base tienes el valor en euros, a ti te llega la moneda y la cantidad ofrecida; del Banco Central obtienes el contravalor en euros de esa moneda; te bastará multiplicar ese contravalor por la cantidad ofrecida (el presupuesto) y ya tienes el filtro para comparar con el valor en euros de tu base.
FROM anuncios WHERE valor = (@contravalor * presupuesto)
@contravalor se carga enuna variable, claro.

Imagino que conoces esto:
http://www.imaginanet.com/blog/cambi...l-europeo.html

Quizás es más complicado y yo no he entendido bien.
  #9 (permalink)  
Antiguo 18/08/2012, 00:18
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 6 meses
Puntos: 3
Respuesta: if dentro de mysql

Si, pero lo que no se es como aplicarle la variable correspondiente:

ejemplo:

cliente random A

200 Euros de presupuesto minimo.

a este le hago una jqeury y tengo todos sus datos, no hay problema.


Este cliente consulta los proyectos que hay:

por ejemplo hay tres

uno en dolares, uno en euros y otro en coronas... Como puedo saber que filtro he de aplicar? y se puede hacer en la propia sentencia MYSQL


Es decir como puedo saber que valor tiene en tu ejemplo @contravalor ? es lo que se me escapa ... de ahi que se me ocurrio lo de meter un if dentro de la propia sentencia mysql e investigando he encontrado esto...http://blog.juegosocio.com/if-en-consultas-mysql.html pero no me aclaro con la sintaxis.

De toas formas si se te ocurre otra manera de despejar dicha variable @contravalor bienvenida es!! :D
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #10 (permalink)  
Antiguo 18/08/2012, 01:41
Avatar de protoameeba  
Fecha de Ingreso: septiembre-2005
Mensajes: 195
Antigüedad: 18 años, 6 meses
Puntos: 3
Respuesta: if dentro de mysql

jurena! ya esta tio! llevaba demasiadas horas delante del ordenador! despues se filtran resultados y los que no con el controlador continue; y a correr!!

detoasformas me he encontrado un articulo muy claro a cerca de los if en mysql, que usare mas tarde para otra cosa...

http://www.diegodicamillo.com.ar/blo...s-if-en-mysql/

PD: te mando los votos positivos por la buena ayuda prestada!!! apuntemental: ...despues de mas de 16 horas delante de la pantalla dormir es bueno XDD
__________________
Ser libre no es hacer lo ke uno kiere, sino kerer lo ke uno hace....
  #11 (permalink)  
Antiguo 18/08/2012, 04:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: if dentro de mysql

protoameeba,
te agradezco tus palabras y los votos, pero sigo sin ver en qué he podido ayudarte. De hecho, si has usado IF anidados, quizás es esa la solución que has adoptado, probablemente, hubiera sido mejor usar control de flujo con CASE... WHEN... de MySQL
http://dev.mysql.com/doc/refman/5.0/...functions.html
, eso, si no lo has resuelto todo con programación.
Si el cliente A tiene 200 euros de presupuesto mínimo (no nos dices si el presupuesto es siempre en euros o no, pero si no lo fuera tendrías que convertir a euros el valor de la moneda.
Luego están los proyectos, uno en dólares, otro en euros y otro en coronas. Entiendo que son tres proyectos distintos. Si tú tienes en un array los contravalores de todas esas monedas, la del euro es 1, claro), te resultará fácil consultar todo esto a partir del contravalor y eso sería mejor ayudándote de php en tu caso, pues ese parece ser tu programa. Dejas una variable para el @contravaloreuros y de la base de datos te traes el ISO de las monedas y recorres el array y construyes con if o mejor con CASE ... WHEN una consulta con tres CASE WHEN en el que según la moneda multiplicas por uno o por otro. El número de elementos del case when será el mismo que el número de distintas monedas. Y así preparas la consulta y podrás traerte el proyecto o proyectos que buscas. Es lo que se me ocurre.

Última edición por jurena; 18/08/2012 a las 05:29

Etiquetas: sql, tabla
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 20:18.