Problème requête DELETE

omlaly - 13 mars 2013 à 10:49
 omlaly - 22 mars 2013 à 08:21
Bonjour,

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


Si vous voyez quelque chose, n'hésitez pas...

Cordialement

100 réponses

Beh, ça ajoute autant de fois de colonnes que tu fais des requêtes ALTER TABLE.

Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 mars 2013 à 19:42
Voilà, donc déjà tu as compris qu'un ALTER TABLE se fait une fois pour toute.

Maintenant, peux-tu me dire ce qu'est une clé primaire ?
0
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.

Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
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".
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
C'est ce qui permet la liaison entre des tables.
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 mars 2013 à 21:29
Il manque les termes "champ" et "clé primaire".
Tu comprends le principe général, mais il faut aussi en comprendre le fonctionnement.
0
C'est un champs d'une table qui est relié à un champs d'une autre table (c'est ce que j'ai fait pour les articles/commentaires.)
0
à la clé primaire de l'autre table (par exemple : articles.id_article=commentaires.id_article)
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 mars 2013 à 21:36
Dans ton cas, quel champ est la clé primaire ? Dans quelle table ? Et quel champ est la clé étrangère ?
0
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.
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
20 mars 2013 à 21:47
La clé primaire de ta table commentaires a-t-elle un lien avec la clé étrangère ?
0
Non, c'est id_article de la table commentaires qui est clé étrangère avec id_commentaire de la table articles.

Cordialement
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
21 mars 2013 à 19:00
Elle n'a effectivement rien à voir, mais tu viens d'écrire une grosse niaiserie quand même.
Relis toi et dis moi où est l'ineptie dans ta réponse.

Petit indice : ça a rapport avec les 5 derniers mots de ton message.
Deuxième indice : ça a rapport avec le schéma de ta table articles.
0
C'est pour gérer la relation commentaires/articles (voir quels commentaires sont associés à quels articles) ?
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
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.
0
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.
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
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.
0
Non pardon. C'est entre id_article et id_commentaire ?
0
Salut

J'ai fait cette requête SQL :
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.

Cordialement
0
J'ai fait cette requête SQL :
ALTER TABLE `commentaires` ADD CONSTRAINT `id_article` FOREIGN KEY (`id_article`) REFERENCES `articles` (`id_article`) ON DELETE CASCADE;
 


Les deux cas fonctionnent sauf quand je supprime un article : ça supprime l'article mais pas ses commentaires correspondants.

Cordialement
0
Rejoignez-nous