Consulta SQL sin saber el número de columnas

Merkury

#25 Carga el texto en una variable, a la hora de generar el texto de la consulta parsealo con la descripción almacenada en una variable y lo escapas.

PiradoIV

¿Y si guardas un objeto serializado en una columna?, si no necesitas que esos datos concretos estén indexados, serialize te puede salvar la vida.

serialize()
unserialize()

Lo guardas en una columna TEXT y pista.

#33 ah, vale, creía que estaba sin resolver =)

1 respuesta
Caotico

#32 Mira también me serviría ( me la apunto para un futuro xD )pero con la ayuda de merkury ya he visto por qué era.

Era la codificación, estaba en utf8mb64 y por eso lo guardaba mal o directamente ni ejecutaba la consulta. Ha sido cambiarlo a utf8 normal y aire xDD

Gracias a todos !

1 1 respuesta
kraneok

#14 Puedes utilizar isnull() de SQL, creo que es mejor que utilizar PHP para validar eso.

JuAn4k4

#30
Pero el cuerpo de la noticia, lo que querra sera cambiar el Tipo de datos, de string a text.
Incluso puedes hacer los strings de nvarchar(max) y asi evitas problemas de que quepa o no quepa, pero en sí no estas creando ninguna columna, sino una propiedad string y ya.

De verdad te han dicho :

Quiero una herramienta para modificar la base de datos. ?

Vamos un tortoise, sql server management studio, o cualquier programa de estos que te permiten modificar la base de datos con pantallitas (mucho mas limitado por supuesto).

Es eso ?

Yo no hablo de ocultar/mostrar datos, sino añadir nuevas propiedades a una entidad / quitarlas.

Por ejemplo, imaginate que tienes la entidad "Persona", entonces ellos podran crear/eliminar personas de su bd.
En un momento dado, les da por almacenar el teléfono de la persona, y nadie contó con ello al principio.

Pues ale, sin tener que llamar a un programador y con mi windows xp último modelo con IE6 en marcha y funcionando, abro tu app y me creo una propiedad telefono de tipo string (Nueva columna en tu caso) y ya puedo almacenar aquí el telefono.

¿Es esto lo que te han pedido o algo parecido ?

1 respuesta
M

Según lo que te entiendo, creo que lo mejor sería usar una base de datos NoSQL, tipo MongoDB

1 2 respuestas
elkaoD

Si no necesitas esquema lo de #36 es la mejor idea yo creo.

1
Caotico

#35 Sí, me han pedido eso. Modificar la estructura de la tabla para que si el día de mañana les da por añadir un campo nuevo a la tabla puedan hacerlo. No me refiero a registros, me refiero a que si tengo una tabla personas y el día de mañana además del nombre y la dirección quieren guardar el dni, con añadir un campo nuevo puedan hacerlo.

Vamos me estaba dando problemas la tontería de la codificación de los carácteres, que no se me ejecutaba bien la consulta por eso, todo lo demás por ahora chuta bien.

1 respuesta
JuAn4k4

Entonces no te han pedido que puedan añadir columnas a la tabla, y te has metido tu solito en un berenjenal de cuidado.

Te han pedido poder añadir propiedades a entidades, asi que o te haces un esquema para ello (como te he explicado por arriba más o menos), o utilizas una bd que no tenga columnas por así decirlo (no basados en sql) y puedas añadir propiedades a nodos de forma dinamica, como dice #36.

Tienes que empezar a comprender, que nunca deberian pedirte cómo hacer las cosas, por lo que no te pidieron "quiero añadir columnas a tus tablas de la base de datos" sino : "quiero añadir columnas a las tablas". Y que las columnas y tablas de las que ellos hablan, son las que ven en el explorador en html (por ejemplo) y no las de la bd.

1 respuesta
Soltrac

38 posts hasta que has dicho lo de #38.....

Increible XDDD

1 respuesta
Caotico

#39 Miraré lo de NoSQL porque no tengo ni idea de cómo va pero según he visto por encima parece muy interesante. De todas formas ya te digo que lo que me han pedido y vuelvo a repetir es poder añadir columnas a una tabla de la bbdd, además es que me lo dijo muy claro el tío, que quería específicamente eso. No entiendo por qué crees que no me lo han pedido cuando lo he matizado jaja

De todas formas, si hay una forma diferente a hacer lo que yo pido con SQL escucho sugerencias, porque yo no sé hacerlo de otra forma.

#40 Lo de poder modificar la estructura de la bbdd ya lo dije en #1 tb : p

1 respuesta
JuAn4k4

#41 ¿ Y para que quiere eso ? Hay muchas herramientas para añdir columnas.

Modificar la estructura de la tabla para que si el día de mañana les da por añadir un campo nuevo a la tabla puedan hacerlo.

No tendras la spec por ahi ?

Zuki

y no es mas facil cambiar la estructura de la siguiente manera.

Id/Iduser/value

De esta manera no tienes que modificar columnas de la tabla

JuAn4k4

Yo te pongo un ejemplo de esquema para ver si te valdría:

No es que sea lo que tengas que usar, es solo para que me digas si esto, te serviria.

-- Estas dos tablas definen la estructura

Tabla Entidades
-------------
Id | Nombre | 
-------------
1  | Camara |
-------------

Tabla Propiedades
---------------------------------------------------
Id | EntidadId | Nombre      | Tipo     | Nullable | 
---------------------------------------------------
1  |     1     | Nombre      | string   | false    |
2  |     1     | Megapixels  | int      | true     |
3  |     1     | PrecioMedio | double   | false    |
4  |     1     | FechaCompra | datetime | false    |
---------------------------------------------------

-- Estas dos tablas definen los objetos que hay

Tabla Objetos
----------------------------------------------------------------------
Id | EntidadId | FechaCreacion | FechaModificacion | Nombre          |
---------------------------------------------------------------------
1  | 1         | 01-01-2012    | 01-01-2012        | Canon EOS 400D  |
---------------------------------------------------------------------

Tabla PropiedadValor
---------------------------------------------------------
Id | ObjetoId | PropiedadId | Value (valor serializado) |
---------------------------------------------------------
1  |    1     |     1       |  Canon EOS 400D           |
2  |    1     |     2       |  12          				|
3  |    1     |     3       |  300           			|
4  |    1     |     4       |  23-12-2011	            |
---------------------------------------------------------
2 1 respuesta
Caotico

#44 sí, eso serviría perfectamente, pero no generaría mucha redundancia?

JuAn4k4

Entonces, NO te han pedido añadir columnas a ninguna tabla.

Porque ahi no tienes que añadir columnas a la tabla sino filas, como se ha echo toda la vida.

Yo no veo la redundancia.

Tienes dos tablas que te definen el modelo y otras dos que te definen los objetos.

Si te pones ya muy especial, puedes definir aspectos como hace Alfresco, que viene a ser algo asi como:

Defines propiedades en el aspecto, y una entidad puede heredar de varios aspectos heredando asi sus propiedades. Por lo que : Un objeto puede ser de un solo tipo, pero tener varios aspectos, por lo que compartirias propiedades entre distintos tipos de entidades.

Si usas NoSQL te ahorras el esquema, ya que tienen propiedades dinamicas, simplemente se las añades y ya esta, aunque tendrias que saber que propiedades existen para poder hacer algo curioso, como permitir crear plantillas de presentacion.

1 respuesta
Caotico

#46 Una cosa que no entiendo de tu esquema, tú dices que un objeto puede ser de un tipo pero tener varios aspectos, por lo que compartiría propiedades entre distintos tipos de entidades.

A efectos prácticos, si yo quisiera crear otra entidad llamada coches, podría compartir atributos de la entidad cámara? Supongamos que me interesan los atributos Nombre, Preciomedio y Fechacompra, tendría que replicarlos otra vez o podría compartirlos?

Por eso te decía lo de la redundancia, porque si quisiera que esos atributos fuesen también de la entidad nueva tendría que replicarlos con la id de la nueva entidad?

En la tabla PropiedadValor por qué pones que el value está serializado?

JuAn4k4

Tipos de entidad = Coche, Camara
Aspecto = ProductoComprado (precioCompra, fechaCompra, lugarCompra, factura, ...), Producto (Nombre, Descripcion) [ igual el nombre de este aspecto no es del todo apropiado ]

Necesitarias otra tabla donde dijeras que el tipoCoche tiene los aspectos Producto y producto comprado, y que la camara tiene e laspecto producto y producto comprado.

Y ya si la lias pardisima, haces que puedan tener relaciones entre ellos : (factura = tipo Factura) propiedad de un tipo, y el valor es el Id del objeto en cuestión. (Esto sería 1:N) y te puedes currar las M:N también.

Lo de serializado es para guardar objetos de distinto tipo en la misma columna (string, date, bool, double, int, etc..) o eso, o los pones como string y lo parseas a su correspondiente tipo o te creas columnas diferentes.

Usuarios habituales

  • JuAn4k4
  • Caotico
  • Soltrac
  • elkaoD
  • Merkury
  • Lecherito
  • Meleagant