dnulled
@dnulled
PHP & JavaScript developer

Как сделать так, чтобы при добавлении информации в базу использовались сразу все пользователи?

Не знаю, как объяснить, но попробую.
У меня есть таблица "users", там содержится вся информация о пользователях, есть таблица "pm" - сообщения, как сделать так, чтобы при отправке сообщения оно отправилось сразу всем? (При отправке использую:
"INSERT INTO pm (to,author,time,title,content) VALUES ($to,$author,$sendtime,$title,$message);"

Как сделать так, чтобы сообщения отправились всем?
Желательно готовый код :)
  • Вопрос задан
  • 262 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
INSERT INTO pm (to,author,time,title,content) 
SELECT id, :author, :sendtime, :title, :message
    FROM users

В insert ... select сам select может быть любым, лишь бы в результате его выполнения было нужное число колонок и их можно было привести к требуемым типам данных.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
это зависит. Если у вас 1 000 000 юзеров то будет чета дофига инсертов. А так - цикл, больше ничего собственно не придумаешь, выбираем все id(у вас же id в to вставляется?)
select id from users where 1
результат в цикле делаем инсертами, чотбы не повисло - памяти побольше выделить и время выполнения увеличить. Можно разбить на куски по 1000 и обернуть в транзакцию.
Ответ написан
@AmadeyMinisol
full stack web-developer
в to пишете 0, при выборке сообщений смотрите, если to имеет значение 0 то рассылаете всем пользователям сообщение.
Ответ написан
Adamos
@Adamos
Я бы сделал кроме личных сообщений - оповещения (те, которые всем). Можно в той же таблице, просто с нулевым адресатом.
И к ним дополнительную таблицу - последний id оповещения, которое получил пользователь.
Все оповещения, которые еще им не были получены, выдаются ему при первом же входе, при этом в таблицу заносится id последнего выданного.
Хотя им неплохо бы и срок жизни иметь - через год-два смысла в них точно не будет...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы