Foros del Web » Programando para Internet » PHP »

Demasiados campos para la tabla en la bdd!!

Estas en el tema de Demasiados campos para la tabla en la bdd!! en el foro de PHP en Foros del Web. Hola a todos! Aunque llevo tiempo leyendo el foro es la primera vez que escribo! Vereis me ha surgido un problema que no se como ...
  #1 (permalink)  
Antiguo 21/01/2008, 03:03
 
Fecha de Ingreso: enero-2008
Mensajes: 18
Antigüedad: 16 años, 3 meses
Puntos: 0
Demasiados campos para la tabla en la bdd!!

Hola a todos!
Aunque llevo tiempo leyendo el foro es la primera vez que escribo!
Vereis me ha surgido un problema que no se como solucionar.

Mi web tiene varios productos y cada uno de los productos tiene varios tamaños disponibles (hasta 40 tamaños distintos). El problema me ha surgido en el momento en el que no se como tratar todos los tamaños. Son 50 valores y no quisiera que mi tabla tuviera tantisimos campos.

La question es que en mi gestor de productos quisiera poder modificar los tamaños a menudo, pero quisiera por ejemplo, me salieran en checkbox (no se si es la opcion mas viable) el listado de los productos y me salgan seleccionados los tamaños que hay en la base de datos. Esto sabria hacerlo si cada tamaño fuera un campo de la base de datos, consultando simplemente, pero al ser tantos...

Hay alguna otra opcion mas viable?

Espero haberme explicado bien... Gracias!!
  #2 (permalink)  
Antiguo 21/01/2008, 03:30
 
Fecha de Ingreso: enero-2008
Ubicación: Sevilla
Mensajes: 22
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: Demasiados campos para la tabla en la bdd!!

Cita:
Iniciado por Martap Ver Mensaje
Hola a todos!
Aunque llevo tiempo leyendo el foro es la primera vez que escribo!
Vereis me ha surgido un problema que no se como solucionar.

Mi web tiene varios productos y cada uno de los productos tiene varios tamaños disponibles (hasta 40 tamaños distintos). El problema me ha surgido en el momento en el que no se como tratar todos los tamaños. Son 50 valores y no quisiera que mi tabla tuviera tantisimos campos.

La question es que en mi gestor de productos quisiera poder modificar los tamaños a menudo, pero quisiera por ejemplo, me salieran en checkbox (no se si es la opcion mas viable) el listado de los productos y me salgan seleccionados los tamaños que hay en la base de datos. Esto sabria hacerlo si cada tamaño fuera un campo de la base de datos, consultando simplemente, pero al ser tantos...

Hay alguna otra opcion mas viable?

Espero haberme explicado bien... Gracias!!
La opción más segura y más buena de cara al diseño de la base de datos es que utilices una tabla con los tamaños, de forma que

[PRODUCTOS]
id
nombre
...

[PRODUCTOS_TAMAÑOS]
id_producto
id_prodtam
...

Así, cuando consultes un producto, puedes tener un catálogo ilimitado de tamaños accediendo en la base de datos a aquellos tamaños cuyo id_producto sea el de la tabla de productos...

Otra opción es montarlo con 3 tablas si el catálogo de tamaños es fijo para todos los productos:

[PRODUCTOS]
id
nombre
...

[TAMAÑOS]
id
nombre
...

[PRODUCTO_TAMAÑOS]
id_producto
id_tamaño

De forma que productos te almacena datos de los productos, tamaños sólo de tamaños (independientemente del producto y en la tabla producto_tamaños almacenas aquellos tamaños seleccionados para cada producto. Los checkbox que aparecerán seleccionados son los de esta tabla (y, en consecuencia, también aquellos que modifique tu cliente cada vez).

Saludos
  #3 (permalink)  
Antiguo 21/01/2008, 03:55
 
Fecha de Ingreso: enero-2008
Mensajes: 18
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Demasiados campos para la tabla en la bdd!!

Gracias por tu respuesta!
Tienes razon, lo mejor es que relacione con tres tablas, de esta manera me sera mas claro y no tendre que crear tantisimos campos.
Probare a ver que tal!

Muchas gracias!
  #4 (permalink)  
Antiguo 21/01/2008, 04:21
 
Fecha de Ingreso: enero-2008
Ubicación: Sevilla
Mensajes: 22
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: Demasiados campos para la tabla en la bdd!!

Cita:
Iniciado por Martap Ver Mensaje
Gracias por tu respuesta!
Tienes razon, lo mejor es que relacione con tres tablas, de esta manera me sera mas claro y no tendre que crear tantisimos campos.
Probare a ver que tal!

Muchas gracias!
De nada, sobre todo te di esa solución por la flexibilidad (ya no tiene que importarte si hay 40 o 100 tamaños...) Suerte!
  #5 (permalink)  
Antiguo 21/01/2008, 06:56
 
Fecha de Ingreso: enero-2008
Mensajes: 18
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Demasiados campos para la tabla en la bdd!!

Perdona, solo una question mas.

Cuando se abre la pagina de modificar, como hago para que se marquen solo los checkbox de los tamaños que tiene ese producto?
  #6 (permalink)  
Antiguo 21/01/2008, 07:24
 
Fecha de Ingreso: enero-2008
Ubicación: Sevilla
Mensajes: 22
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: Demasiados campos para la tabla en la bdd!!

Cita:
Iniciado por Martap Ver Mensaje
Perdona, solo una question mas.

Cuando se abre la pagina de modificar, como hago para que se marquen solo los checkbox de los tamaños que tiene ese producto?
si tú montas tu php de forma que listes los tamaños, le pasas por parámetro el código de producto y entonces haces lo siguiente:
- Recorrer la lista de tamaños (esto no depende del producto)
- Preparas el checkbox con algo así como:
$cadena = "<input type='checkbox' name='tamano".$cod_tamano."'";
- Consultas en la tabla de tamano_producto para el cod_produto que sabes y el cod_tamano que estás tratando en esta pasada. Si la fila existe, significa que el cliente ha indicado este tamaño como uno de los posibles para el producto, por lo que haces $cadena.=" checked";
- Finalizas $cadena con $cadena.=">" y le haces un echo para que se muestre este checkbox

Espero haberte ayudado, si no te queda algo claro pregúntalo ;) saludos
  #7 (permalink)  
Antiguo 21/01/2008, 07:37
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Re: Demasiados campos para la tabla en la bdd!!

La estructura de la BDD más correcta es con 3 tablas: Una para los productos, otra para los tamaños, y otra para la asociación de productos-tamaños.


Con respecto a la otra cuestión, la que te proponen es una buena idea. Aunque yo hacría que los checkbox fuesen un array, luego te va a resultar más fácil tratarlos.
  #8 (permalink)  
Antiguo 21/01/2008, 08:51
 
Fecha de Ingreso: enero-2008
Mensajes: 18
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Demasiados campos para la tabla en la bdd!!

gracias!!!

Podria hacerlo en vez de en un checkbox en una lista?
Por ejemplo asi:

<option <?php * echo "selected"; ?> value="0">15cm x 15cm</option>


* y donde está el asterisco hacer un select y comprobar que ese registro existe?
  #9 (permalink)  
Antiguo 21/01/2008, 10:16
 
Fecha de Ingreso: enero-2008
Ubicación: Sevilla
Mensajes: 22
Antigüedad: 16 años, 3 meses
Puntos: 1
Re: Demasiados campos para la tabla en la bdd!!

Cita:
Iniciado por Martap Ver Mensaje
gracias!!!

Podria hacerlo en vez de en un checkbox en una lista?
Por ejemplo asi:

<option <?php * echo "selected"; ?> value="0">15cm x 15cm</option>


* y donde está el asterisco hacer un select y comprobar que ese registro existe?
No he trabajado con listas que permitan multiselección aunque supongo que sí se podrá hacer. Eso sí, lo que tú propones va a sobrecargar muchísimo la base de datos (una consulta a la misma tabla por cada uno de los tamaños siempre...)

Pienso que es mejor mostrar todas las opciones y luego asignar los selected por javascript (si puedes usar JS). Sólo haces una consulta a la BD. Otra opción (sin usar JS) puede ser guardar un array donde tengas los tamaños seleccionados para el id_producto en curso y luego a la hora de construir el select de múltiple elección asignar los selected. Algo como

<option <?php if ($existe_tam[$cod_tam]) echo "selected"; ?> value="0">15cm x 15cm</option>

Donde $existe_tam[$cod_tam] existe si y sólo si has detectado la fila id_producto, id_tamaño en una consulta previa a la tabla producto_tamaño para el código de producto q estés tratando.

Saludos
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 13:11.