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 :)