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

Como Hago Una Consulta SQL Dinamica ?

Estas en el tema de Como Hago Una Consulta SQL Dinamica ? en el foro de Mysql en Foros del Web. Hola Maestros, Aqui yo denuevo, me encuentro realizando mi practica profesional y tengo solo nociones de MySQL por eso recurro a ustedes, Tengo Un Index ...
  #1 (permalink)  
Antiguo 31/03/2011, 05:33
Avatar de Hs_Jeldres  
Fecha de Ingreso: marzo-2011
Mensajes: 25
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Como Hago Una Consulta SQL Dinamica ?

Hola Maestros,
Aqui yo denuevo, me encuentro realizando mi practica profesional y tengo solo nociones de MySQL por eso recurro a ustedes,

Tengo Un Index Php que recibe 4 parametros
- opera (operador1,operador2,operador2,operador n)
- nego (negocio1,negocio3,negocio3,negocio n)
- ato (ato1,ato2,ato3,ato n)
- mes_ (mes_1,mes_2,mes_3,mes_n)

los cuales llenan 4 combobox para su seleccion y busqueda en la base de datos.

trabajo con heidi SQL
Código MySQL:
Ver original
  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_cal_pas`(IN `ato` varchar(50), IN `nego` varchar(50), IN `opera` varchar(50), IN `mes_` INT)
  2.     CONTAINS SQL
  3.     COMMENT ''
  4. SELECT CorrigePostaXTPO.LAm,CorrigePostaXTPO.ORIm,CorrigePostaXTPO.Negocio,
  5. Month(FTRAMO) as Mes, SUM(F+J+Y) as pasajeros_total
  6. FROM PaxEmbarcados LEFT JOIN CorrigePostaXTPO ON
  7. (PaxEmbarcados.NRO = CorrigePostaXTPO.NRO)
  8. AND (PaxEmbarcados.LA = CorrigePostaXTPO.LA)
  9. AND (PaxEmbarcados.DES = CorrigePostaXTPO.DES)
  10. AND (PaxEmbarcados.ORI = CorrigePostaXTPO.ORI)
  11. where CorrigePostaXTPO.LAm=opera
  12. and CorrigePostaXTPO.Negocio=nego
  13. and Month(FTRAMO)=mes_
  14. and CorrigePostaXTPO.ORIm=ato
  15. GROUP BY LAm, CorrigePostaXTPO.Negocio,ORIm, Mes

Código MySQL:
Ver original
  1. CALL `sp_cal_pas`('ARI', 'DCL', 'LA', '2')

__________________________________________
LAm \ORIm\Negocio\ Mes \pasajeros_total
__________________________________________
LA ARI DCL 2 6664
__________________________________________

Aqui no hay errores es mas puede servir de ayuda para quienes necesiten hacer un procedure con parametros, pero me pidieron que fuera dinamico, osea que permita busqueda ingresando de 2 a 4 parametros, el mes es obligatorio y uno de los otros tres, pudiendo ser todos, la verdad soy novato en esto y necesito ayuda estoy leyendo varios temas y info dentro del foro y en la web pero no entiendo mucho porque soy como mi avatar, aun estoy en pañales en sql y php,

desde ya agradesere toda ayuda Capos ,

saludos,

Hernán.
  #2 (permalink)  
Antiguo 31/03/2011, 07:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Como Hago Una Consulta SQL Dinamica ?

No conozco tu entorno de trabajo pero debes construir la sentencia SQL en funcion de los parametros que tengas con valores....

en php se podria hacer...

Código PHP:
Ver original
  1. $filtro = "WHERE MONTH(FTRAMO)=".$mes_;
  2.  
  3. if($opera!=0) $filtro.=" and CorrigePostaXTPO.LAm=".$opera;
  4.  
  5. if($nego!=0)  $filtro.=" and CorrigePostaXTPO.Negocio=".$nego;
  6.  
  7. if($ato!=0) $filtro.=" AND CorrigePostaXTPO.ORIm=".$nego;

(uso !=0 por que considero el 0 como el valor neutro de un combobox)

la variable filtro se ajustará a los campos con valor los que no tengan no estaran...

Luego es question de juntar filtro con el resto de sentencia SQL y ejecutar...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 31/03/2011 a las 07:25
  #3 (permalink)  
Antiguo 31/03/2011, 08:42
Avatar de Hs_Jeldres  
Fecha de Ingreso: marzo-2011
Mensajes: 25
Antigüedad: 13 años, 7 meses
Puntos: 0
De acuerdo Respuesta: Como Hago Una Consulta SQL Dinamica ?

Gracias por responder, entiendo la logica, pero de verdad soy principiante en esto no tengo ni la menor idea de como implementarlo en el codigo, tanto php como en el precedimiento, si me puedes ayudar por favor,

saludos y gracias nuevamente.
  #4 (permalink)  
Antiguo 01/04/2011, 01:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Como Hago Una Consulta SQL Dinamica ?

Código PHP:
Ver original
  1. function sp_cal_pas($ato=0, $nego=0,$opera=0,$mes_=0){
  2.  
  3. $sql="SELECT CorrigePostaXTPO.LAm, ".  
  4.               "CorrigePostaXTPO.ORIm,CorrigePostaXTPO.Negocio,".
  5.               "MONTH(FTRAMO) as Mes, SUM(F+J+Y) as pasajeros_total ".
  6.           "FROM PaxEmbarcados LEFT JOIN CorrigePostaXTPO ".
  7.                "ON (PaxEmbarcados.NRO = CorrigePostaXTPO.NRO) ".
  8.                     "AND (PaxEmbarcados.LA = CorrigePostaXTPO.LA) ".
  9.                     "AND (PaxEmbarcados.DES = CorrigePostaXTPO.DES) ".
  10.                     "AND (PaxEmbarcados.ORI = CorrigePostaXTPO.ORI)";
  11.  
  12. $filtro = "WHERE MONTH(FTRAMO)=".$mes_;
  13.  
  14. if($opera!=0) $filtro.=" and CorrigePostaXTPO.LAm=".$opera;
  15.  
  16. if($nego!=0)  $filtro.=" and CorrigePostaXTPO.Negocio=".$nego;
  17.  
  18. if($ato!=0) $filtro.=" AND CorrigePostaXTPO.ORIm=".$nego;
  19.  
  20. $sql.=$filtro."GROUP BY ".
  21.               "CorrigePostaXTPO.ORIm,CorrigePostaXTPO.Negocio,MONTH(FTRAMO);";
  22.  
  23. $result = mysql_query ($sql);
  24.  
  25. echo "<table width='100%' border='0' cellspacing='0' cellpadding='0'>".
  26.              "<tr>".
  27.                  "<td>LAm</td>".
  28.                  "<td>ORIm</td>".
  29.                  "<td>Negocio</td>".
  30.                  "<td>Mes</td>".
  31.                  "<td>pasajeros_total</td>".
  32.               "</tr>";
  33. while ($row = mysql_fetch_assoc($result)) {
  34.  
  35.      echo "<tr>".
  36.                  "<td>".$row['LAm']."</td>".
  37.                  "<td>".$row['ORIm']."</td>".
  38.                  "<td>".$row['Negocio']."</td>".
  39.                  "<td>".$row['Mes']."</td>".
  40.                  "<td>".$row['pasajeros_total']."</td>".
  41.               "</tr>";
  42.  
  43. }
  44.  
  45. echo "</table>";
  46.  
  47. }


Esto seria una función php equivalente a tu procedure que ademas imprime una tabla html con los datos.

Para lo que quieres hacer, obtener unos datos y seguramente mostrarlos en una web es mas apropiado algo asi que un PROCEDURE que yo reservaria para trabajos mas internos de la bbdd.

Funcinara siempre que tengas una conexion a la bbdd activa, date una vuelta por el manual de php
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 01/04/2011 a las 01:26

Etiquetas: dinamica, sql
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 14:03.