J'ai un problème avec une requête SQL DELETE. En effet, je voudrais faire une requête SQL pour pouvoir supprimer un article et ses commentaires éventuels.
J'ai fait une requête SQL DELETE avec une jointure entre les deux tables
Voici les CREATE TABLE des deux tables :
Articles
CREATE TABLE IF NOT EXISTS `articles` (
`id_article` int(11) NOT NULL AUTO_INCREMENT,
`nom_village` varchar(255) CHARACTER SET latin1 NOT NULL,
`nom_categorie` varchar(255) CHARACTER SET latin1 NOT NULL,
`date_depot` datetime NOT NULL,
`titre_article` varchar(255) NOT NULL,
`texte_article` text NOT NULL,
`auteur_article` varchar(255) NOT NULL,
PRIMARY KEY (`id_article`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=60 ;
Commentaires
CREATE TABLE IF NOT EXISTS `commentaires` (
`id_commentaire` int(11) NOT NULL AUTO_INCREMENT,
`user_pseudo` varchar(255) NOT NULL,
`nom_village` varchar(255) NOT NULL,
`nom_categorie` varchar(255) NOT NULL,
`date_depot` datetime NOT NULL,
`texte_commentaire` text NOT NULL,
`id_article` int(11) NOT NULL,
PRIMARY KEY (`id_commentaire`),
KEY `FOREIGN KEY` (`id_article`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Voici le code PHP (la requête SQL) :
$id_article=$donnees_messages['id_article'];
// Suppression de l'article et de ses éventuels commentaires
$req_suppression_commentaires =
"DELETE articles,commentaires FROM articles,commentaires WHERE articles.id_article=commentaires.id_commentaire AND articles.id_article=".$id_article;
$query_alerte_email_nouvel_article = mysql_query($req_suppression_commentaires) or die ('Erreur sur la requête SQL concernant la suppression des articles et des commentaires correspondants'.mysql_error()); // Envoie une requête à un serveur MySQL
echo "Vous avez supprimé cet article et ses commentaires éventuels.
";
Voici l'erreur :
Erreur sur la requête SQL concernant la suppression des articles et des commentaires correspondantsYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Beh c'est simple, c'est un identifiant qui permet de trouver chacune des occurrences présentes dans la base de données de manière unique, elle est auto incrémentée.
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 20 mars 2013 à 21:21
C'est effectivement une colonne contenant une valeur unique pour chaque enregistrement de la table (elle n'est pas nécessairement un entier auto-incrémenté, mais passons).
Maintenant dis moi ce qu'est une clé étrangère en utilisant "champ", "table" et "clé primaire".
Vous n’avez pas trouvé la réponse que vous recherchez ?
La clé primaire de la table articles, c'est id_article.
La clé primaire de la table commentaire, c'est id_commentaire.
La clé étrangère, c'est id_article de la table commentaires.
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 21 mars 2013 à 20:44
Ta phrase :
[..] id_commentaire de la table articles
Ton schéma :
CREATE TABLE IF NOT EXISTS `articles` (
`id_article` int(11) NOT NULL AUTO_INCREMENT,
`nom_village` varchar(255) CHARACTER SET latin1 NOT NULL,
`nom_categorie` varchar(255) CHARACTER SET latin1 NOT NULL,
`date_depot` datetime NOT NULL,
`titre_article` varchar(255) NOT NULL,
`texte_article` text NOT NULL,
`auteur_article` varchar(255) NOT NULL,
PRIMARY KEY (`id_article`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
Si tu vois pas le souci je peux vraiment plus rien pour toi.
Il faut que je fasse un ALTER TABLE sur la table article pour rajouter la relation entre id_article et id_commentaire, non ? Il manque la relation entre les deux tables.
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 21 mars 2013 à 20:59
C'est donc mon dernier message, tu m'épuises. Tu écris "id_commentaire de la table articles", mais TA SATANéE TABLE N'A PAS DE CHAMP id_commentaire ! (et elle n'en a pas besoin)
En fait ça rentre par une oreille pour sortir par l'autre aussitôt.
Tu fais semblant de comprendre mais tu t'en bats les coudes.
J'en ai marre. Si tu cherches un passe-temps, mets toi plutôt au jardinage, c'est peine perdue pour le dev.
ALTER TABLE `commentaires`
ADD CONSTRAINT `id_article` FOREIGN KEY (`id_article`) REFERENCES `articles` (`id_article`) ON DELETE NO ACTION ON UPDATE NO ACTION;
Les deux cas fonctionnent maintenant. Par contre, maintenant dans la table commentaires, le champs id_article n'est plus bleu (avant quand je cliquais dessus, il m'envoyait au champs id_article de la table articles), est-ce normal ? De plus, maintenant quand je supprime un article, ça supprime l'article mais pas ses commentaires éventuels.