[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Рассылка сообщений юзерам
Tadochi
как снизить нагрузку на сервер, при рассылке сообщений?

если юзеров больше 1000, будет более 1000 запросов.

$query = mysql_query('select `id` from `users`');

while($var = mysql_fetch_assoc($query))
{
mysql_query("insert into `user_mail` (`user_id`, `text`) values ('".$var['id']."', 'TEST')"); // короче рассылка сообщений
}

есть идея чтобы сообщения отправлялись не всем сразу, а только некоторым, например только 100 чел. и при обновлении страницы, отправлялось еще 100 человек, и так несколько раз обновлять страницу, до того как всем дойдет сообщения. Надеюсь понятно объяснил...
надеюсь это реализуемо, ведь
Скрытый текст
Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему
Valick
надо формировать многострочный инсерт

_____________
Стимулятор ~yoomoney - 41001303250491
Hello
Используйте LIMIT
$query = mysql_query('SELECT `id` FROM `users` LIMIT 100');


_____________
VPS от 5$, первые 2 месяца - бесплатно.
Tadochi
Hello и сообщение дойдет только стам. а остальным?
Tadochi
Valick
можно пример?
Valick
Да вам скорее всего лучше переделать немного структуру БД. Есть возможность?
должна быть
таблица юзеров (подозреваю что есть)
таблица сообщений (тоже должна быть)
и добавить таблицу связи, кто кому какое сообщение отправил.
В итоге при рассылке, как и в любом другом случае, само сообщение в единичном экземпляре.
А в таблице связи будет указано кому это сообщение адресовано.
Чуть позже нарисую пример, там же будет и формирование многострочного инсерта.

_____________
Стимулятор ~yoomoney - 41001303250491
Hello
Цитата (Tadochi @ 6.02.2013 - 18:00)
Hello и сообщение дойдет только стам. а остальным?

Что мешает сохранить последний id, которому было отправлено письмо, и учитывать его при запросе?

_____________
VPS от 5$, первые 2 месяца - бесплатно.
Valick
Цитата
Что мешает сохранить последний id, которому было отправлено письмо, и учитывать его при запросе?

достаточно не надежный вариант, что бы его использовать

_____________
Стимулятор ~yoomoney - 41001303250491
Valick
CREATE TABLE IF NOT EXISTS `user` (
`u_id` int(10) NOT NULL AUTO_INCREMENT,
`u_name` varchar(255) NOT NULL,
PRIMARY KEY (`u_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `message` (
`m_id` int(10) NOT NULL AUTO_INCREMENT,
`m_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`m_autor` int(10) NOT NULL,
`m_content` text NOT NULL,
`m_title` varchar(255) NOT NULL,
`m_descr` int(10) NOT NULL,
PRIMARY KEY (`m_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `from_to` (
`f_id` int(10) NOT NULL AUTO_INCREMENT,
`from_id` int(10) NOT NULL,
`to_id` int(10) DEFAULT NULL,
`m_id` int(10) NOT NULL,
`f_create` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`f_status` int(1) DEFAULT NULL,
`del_from` int(1) DEFAULT NULL,
`del_to` int(1) DEFAULT NULL,
PRIMARY KEY (`f_id`),
KEY `from_id` (`from_id`,`to_id`)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

в поле f_status можно хранить информацию типа прочитано, непрочитано, удалено без прочтения, помечено как спам и тд.
del_from и del_to соответсвенно удаление сообщения у отправителя и получателя
если удалили оба, то можно удалять само сообщение из таблицы message или переносить его в архив

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.