вставить в для всех пользователей, которые находятся в другой таблице

#mysql #sql #pdo

#mysql #sql #pdo

Вопрос:

У меня есть 2 таблицы (уведомления и последующие). Я хочу добавить уведомления для всех пользователей, которые следят за этой страницей. Только для одного пользователя мне нравится это:

 INSERT INTO notifications ( from_id , to_id , type, checked, page_id ) VALUES ( :from_id , :to_id , :type, :checked, :page_id)
 

И я хочу сделать то же самое, но для всех пользователей, которые следят за одной и той же страницей.
важные моменты: page_id указывает страницу, а to_id указывает пользователей.

 CREATE TABLE IF NOT EXISTS `notifications` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`from_id` int(11) NOT NULL,
`to_id` int(11) NOT NULL,
`page_id` int(11) NOT NULL,
`type` int(11) NOT NULL,
`checked` tinyint(1) NOT NULL,
`created_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=122 ;

 -----

CREATE TABLE IF NOT EXISTS `following` (
`following_id` int(11) NOT NULL AUTO_INCREMENT,
`page_id` int(11) NOT NULL,
`follower_id` int(11) NOT NULL,
`accepted` tinyint(1) NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`following_id`),
 UNIQUE KEY `id` (`following_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci AUTO_INCREMENT=82 ;
 

как я могу этого добиться?

Ответ №1:

Вы используете insert . . . select синтаксис для вставки нескольких строк из одной таблицы. Я не уверен точно, какие столбцы вы хотите получить от кого, но вот такой подход:

 INSERT INTO notifications(from_id, to_id, type, checked, page_id) 
    select f.follower_id, :to_id, :type, :checked, f.page_id
    from following f
    where f.page_id = :page_id;