04/02/2012, 16:39
|
| | Fecha de Ingreso: febrero-2012
Mensajes: 75
Antigüedad: 12 años, 9 meses Puntos: 6 | |
Respuesta: generar sql por medio de php Yo veo una solución definiendo la consulta con variables, Esto es en lugar de esto:
SELECT * FROM actividad,volcanes,fenomenos WHERE fec_ini_actividad=:fec_ini_actividad AND (vol_actividad=:vol_actividad1 OR vol_actividad=:vol_actividad2 OR vol_actividad=:vol_actividad3 OR vol_actividad=:vol_actividad4 OR vol_actividad=:vol_actividad5)AND(actividad.vol_ac tividad=:vol_actividad1 AND volcanes.cod_volcan=:vol_actividad1 OR actividad.vol_actividad=:vol_actividad2 AND volcanes.cod_volcan=:vol_actividad2
pones esto:
$seleccionar = "SELECT * FROM ".$tablas." WHERE ".$inicio." AND ".$volcanes; (puede que tengas que meter unas comillas simples al inicio o al final, pero creo que así está bien)
Así conseguimos que la consulta "siempre se haga de la misma manera" y ya no tendremos que cambiarla.
Antes inicializamos
$tablas = "actividad,volcanes,fenomenos";
$inicio = "fec_ini_actividad=:fec_ini_actividad";
Y el rollo llega para volcanes:
Primero miras cuantos volcanes te pasa: $nvolcanes
Hace un for o un while con un contador (i) donde:
$volcanes += "vol_actividad=".$vol_actividad1;
if (i!= $nvolcanes){$volcanes += " OR ";}
Yo probaría con eso. El hecho de declarar la consulta con variables te permite cambiar la consulta dinamicamente, otra cosa es que consigas los cambios dinámicos satisfactorios.
Otra cosa, no entiendo porqué repites tantas condiciones:
WHERE fec_ini_actividad=:fec_ini_actividad AND (vol_actividad=:vol_actividad1 OR vol_actividad=:vol_actividad2 OR vol_actividad=:vol_actividad3 OR vol_actividad=:vol_actividad4 OR vol_actividad=:vol_actividad5)AND(actividad.vol_ac tividad=:vol_actividad1 AND volcanes.cod_volcan=:vol_actividad1 OR actividad.vol_actividad=:vol_actividad2 AND volcanes.cod_volcan=:vol_actividad2
Si son campos de diferentes tablas y siempre usas esos criterios cambia la consulta:
WHERE ".$inicio." AND ".$volcanes. " AND ".$actividad. " AND ".$codigo; |