PHP/PDO/SQL Update avec Foreign Key
Posté : 24 oct. 2015, 19:41
Bonjour,
La question comment faire le update ?
J'ai 3 tables 'article', 'categories' et 'artcategories'. Dans la table artCategories contient des foreign key 'article_id' et 'category_id' => Un article peut avoir plusieurs categories et une category peut appartenir à plusieurs articles.
Donc je cherche à savoir comment par exemple faire un UPDATE sur la 'artCategories' ?
Mais ce code me renvoie une erreur duplicate entry, que je comprend très bien puisque j'ai plusieurs entrées avec article_id = 10 et comme ça fonctionne avec des foreign key en CASCADE sur Update et restrict avec delete.
Table articles : article_id, title, content, created_by, last_update, etc.. PRIMARY KEY (article_id)
Table : categories : category_id, name, last_update PRIMARY KEY (category_id)
Table : articles_categories : article_id, category_id, last update;
Structure de la table articles_categories :
-----------------
Jusque la, je suis arrivé à le faire fonctionner mais c'est pas vraiment ça car 1 fois sur 2 ça renvie une erreur, donc si vous pouvez me corriger sur la structure des tables, la requetes et complètement sur le php..je suis preneur.
La question comment faire le update ?
J'ai 3 tables 'article', 'categories' et 'artcategories'. Dans la table artCategories contient des foreign key 'article_id' et 'category_id' => Un article peut avoir plusieurs categories et une category peut appartenir à plusieurs articles.
Donc je cherche à savoir comment par exemple faire un UPDATE sur la 'artCategories' ?
Code : Tout sélectionner
UPDATE artCategories SET category_id=1 WHERE article_id = 10;Table articles : article_id, title, content, created_by, last_update, etc.. PRIMARY KEY (article_id)
Table : categories : category_id, name, last_update PRIMARY KEY (category_id)
Table : articles_categories : article_id, category_id, last update;
Structure de la table articles_categories :
Code : Tout sélectionner
CREATE TABLE IF NOT EXISTS `articles_categories` (
`article_id` smallint(5) unsigned NOT NULL,
`category_id` tinyint(3) unsigned NOT NULL,
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`article_id`,`category_id`),
KEY `fk_article_category_category` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Jusque la, je suis arrivé à le faire fonctionner mais c'est pas vraiment ça car 1 fois sur 2 ça renvie une erreur, donc si vous pouvez me corriger sur la structure des tables, la requetes et complètement sur le php..je suis preneur.
Code : Tout sélectionner
UPDATE articles a
LEFT JOIN aticles_categories ac
ON a.article_id = ac.article_id
LEFT JOIN categories c
ON c.category_id = ac.category_id
SET ac.category_id = :new, ac.last_update = NOW()
WHERE (ac.category_id = :old AND a.article_id = :id)