2013-01-09 2 views
1

J'ai 3 tables on s'appelle abonnées, un utilisateurs, et on s'appelle des blogs. Ils ont chacun l'air comme suit.MySQL insertion multiple d'un nombre variable de lignes basé sur une autre table

CREATE TABLE IF NOT EXISTS `subscribers` (
    `user_id` int(11) NOT NULL, 
    `blog_id` int(11) NOT NULL, 
); 

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL, 
    `name` varchar(255) 
); 

CREATE TABLE IF NOT EXISTS `blogs` (
    `id` int(11) NOT NULL, 
    `name` varchar(255), 
    `user_id` int(11) 
); 

J'ai une situation où une API crée des enregistrements de blog dans notre db automatiquement, ces blogs créés automatiquement sont tous affectés du même utilisateur (dans ce cas 123) de telle sorte que l'on sait qu'ils viennent vraiment de et appartiennent à l'API d'importation. Maintenant, après le fait, un utilisateur doit être créé pour ces blogs d'origine API pour s'occuper d'eux. J'ai créé l'utilisateur 123 en utilisant l'insertion de base, mais maintenant je dois abonner cet utilisateur à chaque blog qu'ils possèdent via une insertion ou une série d'insertions. Je veux savoir s'il est possible de le faire avec une requête. Quelque chose comme ça, mais je me rends compte que j'ai écrit ne fonctionnera pas:

INSERT INTO `subscribers` (`user_id`,`blog_id`) 
VALUES 
(123, (SELECT id FROM `blogs` WHERE `user_id` = 123)); 

Est-il possible de faire une insertion multilignes basé sur un nombre variable de lignes d'une certaine façon, j'ai fait des recherches et je ne peux pas trouver une réponse encore. Merci de votre aide.

Répondre

9

Voici comment faire:

INSERT INTO `subscribers` (`user_id`,`blog_id`) 
    SELECT 123, id FROM `blogs` WHERE `user_id` = 123; 

ou même

INSERT INTO `subscribers` (`user_id`,`blog_id`) 
    SELECT user_id, id FROM `blogs` WHERE `user_id` = 123; 
+0

Merci, exécuté parfaitement même après que je remis en place tous les trucs supplémentaires dans mon code de production. – usumoio

Questions connexes