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

Tratamiento de datos checkbox

Estas en el tema de Tratamiento de datos checkbox en el foro de Bases de Datos General en Foros del Web. Hola. Me gustaría pedir la opinión de la gente acerca de una cuestión a la que me estoy enfrentando. Pongamos, por ejemplo, que tengo un ...
  #1 (permalink)  
Antiguo 08/10/2009, 02:12
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años
Puntos: 2
Tratamiento de datos checkbox

Hola.

Me gustaría pedir la opinión de la gente acerca de una cuestión a la que me estoy enfrentando. Pongamos, por ejemplo, que tengo un sistema de noticias y categorías con las siguientes tablas:

noticia
id
titulo
contenido

categoria
id
nombre

noticia_categoria
id_noticia
id_categoria

A partir de esta estructura tenemos que cada noticia puede pertenecer a varias categorías. El caso de la inserción y la eliminación de noticias es bastante sencillo. El problema me surge cuando me dispongo a hacer una edición de la noticia. Cargo el formulario bien, con sus respectivos checkbox para cada categoría y marco los que corresponden como checked, sin embargo, a la hora de guardar no tengo muy claro qué es lo mejor.

Normalmente lo que hago es un "DELETE" de todos los registros de noticia_categoria correspondientes a la noticia que estoy editando y posteriormente recorro los check y voy insertando registros en esta misma tabla, pero no sé si esto es lo correcto.

Otra opción sería no borrar ninguno e ir comprobando uno a uno, si esta relación noticia-categoria ya tiene un registro en la tabla, y si no lo tiene insertarlo, pero creo que esto provocaría bastantes más consultas.

Quisiera saber qué es lo óptimo en esta situación.

Un saludo
  #2 (permalink)  
Antiguo 08/10/2009, 07:04
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Tratamiento de datos checkbox

No se si te entendí bien, pero asumiendo que trabajas con mysql (Por tu firma) existe la opción de hacer update inner join de varias tablas al tiempo.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 08/10/2009, 09:56
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años
Puntos: 2
Respuesta: Tratamiento de datos checkbox

Gracias por la respuesta.

He estado leyendo acerca del "UPDATE INNER JOIN" el cual no conocía y me ha parecido muy interesante, pero creo que no es aplicable a este caso.

Voy a explicar más concretamente la situación:

Tenemos las tablas antes mencionadas con los siguientes registros:

noticia
id....titulo...........contenido
1......Madrid2016....Contenido1
2......Oscars............Contenido2

categoria
id.......nombre
1........Deporte
2........Eventos
3........Actualidad
4........Politica
5........Cine

noticia_categoria
id_noticia....id_categoria
1.................1
1.................2
1.................3
2.................2
2.................4
2.................5

Bien, de esta forma tenemos que la noticia de Madrid2016(id=1) pertenece a las categorias: Deporte (id=1), Eventos (id=2) y Actualidad (id=3) mientras que la noticia de los Oscars pertenece a las categorías: Eventos (2), Política (4) y Cine (5).

Ahora pensemos en un formulario de edición de una noticia, por ejemplo, de la noticia de los Oscars (id=2) y en él vemos una serie de checks correspondientes a las diferentes categorías, de las cuales "Política", "Eventos" y "Cine" estarían marcadas mientras que el resto estarían sin marcar. Ahora, el usuario desmarcaría el check de "Política", marcaría el check de "Actualidad" y pulsaría en el botón de guardar.

Mi pregunta es, ¿cómo debe el programa hacer estas modificaciones? ¿Qué es lo correcto?
Opción 1:
Borrar todos los registros de la tabla "noticia_categoria" cuyo id_noticia sea "2" e insertar en esta tabla todas las categorías cuyos checks estén marcados. Es decir: "DELETE FROM noticia_categoria WHERE id_noticia=2" y luego hacer un bucle con "INSERT INTO noticia_categoria VALUES(2, $valor_de_cada_check)"
Opción 2:
Recorrer todos los checks y comprobar para cada uno de ellos si se ha cambiado el valor del checkbox, y en caso afirmativo realizar la consulta pertinente a la base de datos. Es decir, hacer un bucle con "SELECT * FROM noticia_categoria WHERE id_noticia=2 AND id_categoria=$valor_de_cada_check" y si la consulta devuelve algún resultado y el check está desactivado hacer un DELETE o si la consulta no devuelve nada y el check está activado hacer un INSERT.

Espero que haya quedado más claro. Y en el caso de que se pueda hacer con un "Update Inner Join", ¿podrías guiarme un poco? No veo manera de hacerlo de esa forma.

Un saludo y gracias

PD: Sí, estoy utilizando mysql y PHP, aunque no se trata del proyecto de mi firma :)

Última edición por paloto; 08/10/2009 a las 10:01
  #4 (permalink)  
Antiguo 08/10/2009, 10:07
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Tratamiento de datos checkbox

Paloto... tuve en un proyecto anterior un problema similar. Y efectivamente la solución fue la numero 1. También pienso que no es muy profesional, pero hay que tener en cuenta que si hablas de check box para cada inserción, son muy pocas sentencias y no afectaría el rendimiento.

El problema se presenta mas que todo en el tratamiento desde el sistema de algo así. En aquella ocasión no se me ocurrió nada mejor. Ahora tampoco
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 08/10/2009, 10:12
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años
Puntos: 2
Respuesta: Tratamiento de datos checkbox

Ok. Gracias. Yo ahora mismo tengo el sistema montado con la opción 1 pero me gustaría saber si existe alguna opción mejor. Estoy seguro de que mucha gente se ha enfrentado a la misma situación y sería de ayuda saber cómo lo ha resuelto cada uno.

Un saludo
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:35.