Если что - запрос-то я соорудил и пользуюсь постоянно.
Но теперь встала другая проблема. Как правильно тут заметили - бывает необходимость подписать ВСЕХ пользователей на какую-то важную тему.
Я это делаю мягко - без уведомлений на почту, так вот даже таким образом при моих 15 тыс пользователей при публикации нового сообщения в тему, где отслеживают тему 15 тыс пользователей происходит глюк:
При нажатии кнопки "ответить" визуально ничего не происходит - новое сообщение не добавляется, текст в окне редактора - остаётся.
При этом, на самом деле сообщение добавляется, но видно это только при обновлении страницы темы, поэтому по привычке жмёшь пару раз - появляются дубли сообщений.
При этом, видимо, не успевает в БД измениться состояние подписки всех этих 15 тыс пользователей - часть (может и все) не получают уведомления о новом сообщении в этой теме.
Запрос, что я делаю, чтобы подписать пользователей я делаю в лоб такой:
INSERT IGNORE INTO `xf_thread_watch` (`user_id`, `thread_id`, `email_subscribe`) VALUES
(1, 1568, 0),
..
..
(15000, 1568, 0);
При этом я пока не разобрался, в каких таблицах и каким образом происходит изменение состояния подписки и вывода уведомления - скорее в них и будет затык.
Ну я и не мастер ни разу, но что-то мне подсказывает, что:
либо таймауты публикации нужно как-то увеличивать, пока не пройдут все необходимые изменения;
либо индексы какие прописать для этих таблиц с изменениями;
либо я баклан, и нужно изменения вносить не только в эту таблицу, но и куда-то ещё -)