Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Consultas en columnas dinámicas

Estas en el tema de Consultas en columnas dinámicas en el foro de PHP en Foros del Web. Hola, abro este post para ver si podéis asesorarme y orientarme hacia dónde debo ir porque ando un poco perdido al respecto. Necesito crear una ...
  #1 (permalink)  
Antiguo 07/05/2013, 07:22
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 2
Consultas en columnas dinámicas

Hola, abro este post para ver si podéis asesorarme y orientarme hacia dónde debo ir porque ando un poco perdido al respecto.

Necesito crear una aplicación en php en la cual un usuario pueda modificar una tabla.
En esta tabla va a poder añadir columnas, será un simple formulario, elegirá el nombre y el tipo de datos que se van a guardar ( varchar, num, etc etc ) con un simple alter table.

El problema viene en lo siguiente, quiero ejecutar una consulta que muestre todos los datos, ( esto lo tengo fácil, porque aunque no sepa que columnas va a añadir el usuario con un select * from table me sirve ) y quiero que el usuario pueda hacer consultas sobre todas las columnas y datos de la tabla.

Entonces mi quebradero de cabeza es, cómo programo esta consulta, para que dinámicamente el usuario pueda hacer consultas, porque si la última columna que ha creado es numérica la consulta se hará sin comillas y si es de texto tendré que ponerlas.

Concreto más por si no he sido lo suficientemente claro, si el usuario ha añadido una última columna llamada nombres, cómo hago para que genericamente me haga select * from tabla where nombres = " pepito" o que si el usuario ha añadido una ultima columna llamada precio, me genere esta consulta, select * tabla where precio = 22 ;

La cuestión es que el usuario debe poder hacer consultas sobre todos los campos de la tabla y de todas las formas posibles.

Ando perdido con esa parte y necesito otro punto de vista jeje a ver si podéis ayudarme
  #2 (permalink)  
Antiguo 07/05/2013, 08:11
Avatar de Trublux  
Fecha de Ingreso: octubre-2010
Ubicación: Madrid
Mensajes: 355
Antigüedad: 13 años, 6 meses
Puntos: 48
Respuesta: Consultas en columnas dinámicas

Pon siempre comillas aunque sea un campo numérico.
__________________
eZ Publish Developer Basic Legacy
eZ Publish Developer Basics (4.4)
Alojamientos rurales en España
  #3 (permalink)  
Antiguo 07/05/2013, 08:13
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: Consultas en columnas dinámicas

Muchas gracias por tu respuesta, poner comillas en todos los tipos de campos hará que la consulta se ejecute bien? Y si tengo que guardar un número, poniendo comillas lo guardará bien ?
  #4 (permalink)  
Antiguo 07/05/2013, 08:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consultas en columnas dinámicas

Cita:
Iniciado por x3xtres Ver Mensaje
Muchas gracias por tu respuesta, poner comillas en todos los tipos de campos hará que la consulta se ejecute bien? Y si tengo que guardar un número, poniendo comillas lo guardará bien ?
Podrías hacer unas consultas de prueba para comprobarlo, ¿no te parece?

No hace falta que preguntes sin antes intentar.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 07/05/2013, 08:21
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: Consultas en columnas dinámicas

Ya, lo siento pero es que tengo que empezar todo desde 0 en base a esto. Por eso lo pregunto. Para empezar de una forma u otra, pero gracias por vuestras respuestas.

Ahora me viene otra duda a la cabeza que inicialmente no he planteado, según el tipo de campo que ha creado el usuario debo realizar un tipo de consulta u otra, me explico, si es un campo date, que tenga la opcion de realizar un between, si es texto que sólo deje la opcion de ="" , si es número que le deje elegir > < >= <= =, etc.

Supongo que para eso no hay nada mágico que pueda ayudarme, sólo se me ocurre programarlo a base de condicionales, tenéis alguna idea vosotros?
  #6 (permalink)  
Antiguo 07/05/2013, 08:29
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consultas en columnas dinámicas

Usar únicamente condicionales es demasiado, debes usar colecciones en conjunto también.

Es decir, tienes un array que contiene todos los operadores posibles por tipo de datos, entonces dependiendo del tipo de dato obtienes la lista de operadores correctos.

Código PHP:
$ops = array(
  
'string' => array('=''!='),
  
'date' => array('between'),
); 
Aunque en dado caso deberías estudiar también más de SQL, porque si bien recuerdo esto es equivalente:

Cita:
WHERE a BETWEEN b AND c
WHERE a >= b AND a <= c
Ojalá te sirva.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 07/05/2013, 08:37
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: Consultas en columnas dinámicas

Cita:
Iniciado por pateketrueke Ver Mensaje
Usar únicamente condicionales es demasiado, debes usar colecciones en conjunto también.

Es decir, tienes un array que contiene todos los operadores posibles por tipo de datos, entonces dependiendo del tipo de dato obtienes la lista de operadores correctos.

Código PHP:
$ops = array(
  
'string' => array('=''!='),
  
'date' => array('between'),
); 
Aunque en dado caso deberías estudiar también más de SQL, porque si bien recuerdo esto es equivalente:



Ojalá te sirva.

Wow muchas gracias, usaré eso ! Ya lo último, no sé si esto será posible, pero cuando haga un DESC tabla; para obtener los campos de la tabla, sabes si hay algún comando en sql que me de el tipo de datos que contiene cada columna ?

Sino lo que se me había ocurrido es guardar en otra tabla los tipos de campos que se van añadiendo y lanzar consultas a esa tabla para saber sobre qué tipo de campo voy a realizar una consulta, no sé si me explico bien. Ya con esto quedaría todo resuelto y muchas gracias por tu ayuda !
  #8 (permalink)  
Antiguo 07/05/2013, 08:39
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consultas en columnas dinámicas

Si, existen instrucciones de SQL para conocer la información de una table y sus columnas, pero nada de eso corresponde al foro de PHP, te toca investigar en la documentación oficial.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 07/05/2013, 08:40
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: Consultas en columnas dinámicas

Cita:
Iniciado por pateketrueke Ver Mensaje
Si, existen instrucciones de SQL para conocer la información de una table y sus columnas, pero nada de eso corresponde al foro de PHP, te toca investigar en la documentación oficial.
Sabiendo que es posible me sirve jeje Muchas gracias por todo !!
  #10 (permalink)  
Antiguo 07/05/2013, 08: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: Consultas en columnas dinámicas

Cita:
Iniciado por Trublux Ver Mensaje
Pon siempre comillas aunque sea un campo numérico.
Mala idea. Obliga a realizar conversiones implícitas innecesarias y esconde los defectos de programación, ya que las conversiones no muestran la falta de datos o errores en los mismos.
Si es numérico, no deben ir comillas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 07/05/2013, 10:18
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: Consultas en columnas dinámicas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Mala idea. Obliga a realizar conversiones implícitas innecesarias y esconde los defectos de programación, ya que las conversiones no muestran la falta de datos o errores en los mismos.
Si es numérico, no deben ir comillas.
Gracias por responder, entonces según todo lo que he expuesto, se te ocurre alguna posible solución a este problema ?
  #12 (permalink)  
Antiguo 07/05/2013, 10:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consultas en columnas dinámicas

Cita:
Iniciado por x3xtres Ver Mensaje
Gracias por responder, entonces según todo lo que he expuesto, se te ocurre alguna posible solución a este problema ?
Puedes usar PDO (que sería una excelente idea) para abstraer todo lo referente a la base de datos, usando consultas preparadas internamente hace el escape de datos, convierte tipos de datos y agrega comillas dependiendo del tipo en cuestión.

Es lo mas eficiente que existe, me parece.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 07/05/2013, 10:40
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: Consultas en columnas dinámicas

Cita:
Iniciado por pateketrueke Ver Mensaje
Puedes usar PDO (que sería una excelente idea) para abstraer todo lo referente a la base de datos, usando consultas preparadas internamente hace el escape de datos, convierte tipos de datos y agrega comillas dependiendo del tipo en cuestión.

Es lo mas eficiente que existe, me parece.
siempre uso pdo, lo que pasa es que lo de las comillas en alguna ocasión me ha dado muuuuchos problemas ( ahora no podría decirte casos concretos porque no lo recuerdo ) y por eso era algo que me daba bastante miedo a la hora de programar esto.
  #14 (permalink)  
Antiguo 07/05/2013, 11:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Consultas en columnas dinámicas

¿Pero usabas Prepared Statements?
  #15 (permalink)  
Antiguo 07/05/2013, 12:59
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: Consultas en columnas dinámicas

Cita:
Iniciado por GatorV Ver Mensaje
¿Pero usabas Prepared Statements?
No, no los he utilizado nunca la verdad. Debería?
Edit: Si lo dices por la seguridad, a mí en esta aplicación me da igual la seguridad, no necesito que tenga seguridad contra inyección de código y demás.

Última edición por x3xtres; 07/05/2013 a las 13:45
  #16 (permalink)  
Antiguo 07/05/2013, 14:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Consultas en columnas dinámicas

Pues más que por seguridad, por lo que te dice @pateketrueke, si usas Prepared Statements la base de datos se encarga de quotear si es necesario o no dependiendo del tipo de dato que use la columna.

Eso te da la ventaja de seguridad justamente y aparte te evita que tengas que estar haciendo cosas extrañas para construir tus SQLs ya que le dejas eso a la BDD.
  #17 (permalink)  
Antiguo 07/05/2013, 14:56
 
Fecha de Ingreso: febrero-2012
Mensajes: 28
Antigüedad: 12 años, 2 meses
Puntos: 2
Respuesta: Consultas en columnas dinámicas

Cita:
Iniciado por GatorV Ver Mensaje
Pues más que por seguridad, por lo que te dice @pateketrueke, si usas Prepared Statements la base de datos se encarga de quotear si es necesario o no dependiendo del tipo de dato que use la columna.

Eso te da la ventaja de seguridad justamente y aparte te evita que tengas que estar haciendo cosas extrañas para construir tus SQLs ya que le dejas eso a la BDD.
Hmmm mañana lo implemento y comento la jugada a ver qué tal, gracias.

Etiquetas: columnas, formulario, select, 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 05:50.