Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/05/2010, 14:39
Avatar de gnzsoloyo
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: como hago esta consulta?

En esencia el modelo funcional para tu caso sería:

Código MySQL:
Ver original
  1. CREATE TABLE `advertisement` (
  2.   `id_advertisement` int(11) unsigned zerofill NOT NULL auto_increment,
  3.   `adv_subject` text NOT NULL,
  4.   `price` varchar(20) default NULL,
  5.   `description` longtext,
  6.   `address` text,
  7.   `contact_email` varchar(50) default NULL,
  8.   `contact_telephone` varchar(20) default NULL,
  9.   `visitors_number` int(6) unsigned NOT NULL default '0',
  10.   `publication_date` datetime NOT NULL
  11.   PRIMARY KEY  (`id_advertisement`),
  12.   UNIQUE KEY `id_advertisement` (`id_advertisement`)
  13.  
  14. CREATE TABLE `image` (
  15.   `image_location` varchar(100) NOT NULL default '../images/adv/default.jpg',
  16.   `thumb_location` varchar(100) NOT NULL default '../images/thumbs_adv/default.gif',
  17. `id_advertisement` int(11) unsigned zerofill NOT NULL,
  18.   PRIMARY KEY  (`id_image`),
  19.   UNIQUE KEY `id_image` (`id_image`),
  20.   UNIQUE KEY `image_location` (`image_location`),
  21.   UNIQUE KEY `thumb_location` (`thumb_location`)
  22.   CONSTRAINT `advertisement_image_ibfk` FOREIGN KEY (`id_advertisement`) REFERENCES `advertisement` (`id_advertisement`) ON UPDATE CASCADE ON DELETE CASCADE,

Eso define la relación adevertisement con image de la forma 1:N, y hace que si borras el registro en advertisement, todos los registros donde aparezca su id, se borren en cascada.

Si no quieres modificar nada, simplemente tu tabla adevertisement_image, debe incluir un TRIGGER que permita borrar la tabla image luego de eliminar el registro, o bien manejar ese borrado en la aplicación.
La idea sería algo como esto:
Código MySQL:
Ver original
  1. DELETE FROM advertisemenet A
  2.     INNER JOIN advertisemenet_image AI  ON A.id_advertisement = AI.id_advertisement
  3.     INNER JOIN image I  ON AI.id_image  = I.id_image
  4. WHERE A.id_advertisement = valorbuscado;
Donde valorbuscado en un valor de ID pasado por la aplciación.
El uso del FORM en este caso, según manual:
Cita:
sólo los registros coincidentes de las tablas listadas en la cláusula FROM se borran. El efecto es que puede borrar registros para varias tablas al mismo tiempo
Habría que probar, pero se supone que la sentencia usada de esa forma funcionaría correctamente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)