<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; Разработка структуры базы под алгоритм]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6132</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6132&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Разработка структуры базы под алгоритм».]]></description>
		<lastBuildDate>Sat, 20 Aug 2011 05:09:47 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50757#p50757</link>
			<description><![CDATA[<p>Это же обычный планировщик заданий. Храните в таблице отдельные части даты и сравнивайте при извлечении. <br /></p><div class="codebox"><pre><code>
CREATE TABLE `scheduler` (
  `id` INT NOT NULL, 
  `user_id` INT NOT NULL, 
  `s_year` INT NOT NULL, 
  `s_month` INT NOT NULL, 
  `s_day` INT NOT NULL, 
  `s_wday` INT NOT NULL,
  PRIMARY KEY (`id`)
);</code></pre></div><p>Установленные неотрицательные значения полей определяют периодичность выполнения задания. Например, следующим запросом можно найти все задания пользователя, которые должны быть выполнены текущим днем -- включая одноразовые (указаны год-месяц-день) и периодические (в заданный день месяца или день недели). Это примерное решение. Возможно еще требует доработки.<br /></p><div class="codebox"><pre><code>SELECT 
    s_year - EXTRACT(YEAR FROM NOW()) as x_year, 
    s_month - EXTRACT(MONTH FROM NOW()) as x_month, 
    s_day - EXTRACT(DAY FROM NOW()) as x_day, 
    s_wday - WEEKDAY(NOW()) - 1 as x_wday, 
    id 
FROM 
    scheduler
WHERE 
    user_id=0
HAVING 
    x_wday = 0
    OR (
        x_day = 0 OR x_month = 0 OR x_year = 0
    )</code></pre></div><p>Забыл упомянуть, что сей пример написан на MySQL 4.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 20 Aug 2011 05:09:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50757#p50757</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50754#p50754</link>
			<description><![CDATA[<div class="quotebox"><cite>Евген пишет:</cite><blockquote><div class="quotebox"><cite>Spy00000 пишет:</cite><blockquote><p>rem_type - тип напоминания (1 - однократное, 2 - в опр. день недели, 3 - в опр. день месяца, 4 - на третий день после очередного финансового кризиса, и т.д.)<br />rem_num (число) - доп. параметр, зависит от rem_type, для 1 - не используется, для 2 - день недели, когда срабатывать, для 3 - день месяца и т.д.)</p></blockquote></div><p><strong> для 1 - не используется</strong> - НЕТ !!!&nbsp; Тогда для rem_type=1 в rem_num должна стоять дата !</p></blockquote></div><p>Дата тогда уже будет стоять в date, зачем ей ещё в rem_num?</p><div class="quotebox"><cite>Евген пишет:</cite><blockquote><p>А вычислять наверное надо не по следующей дате запуска напоминалки а на сервачке утречком запустится скриптец</p></blockquote></div><p>Имхо, вычислять лучше в момент создания задания и в момент срабатывания. Скрипты лишние запускать не надо будет регулярно.</p><div class="quotebox"><cite>Евген пишет:</cite><blockquote><p>Как тогда описать задание, с помощью этой структуры, если надо напоминание каждый вторник и каждую пятницу ?</p></blockquote></div><p>Тут смотреть надо, какие вообще типы напоминаний будут. Если несколько дней только в &quot;в определённый день недели&quot; - можно в rem_num держать битовую маску дней. Иначе что-то сложнее выдумывать.</p>]]></description>
			<author><![CDATA[null@example.com (Spy00000)]]></author>
			<pubDate>Fri, 19 Aug 2011 16:32:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50754#p50754</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50753#p50753</link>
			<description><![CDATA[<p>Ок, всем спасибо !<br />Думаю вопрос решён...<br />Кстати, довольно не сложно для реализации...</p><p>Тему прошу оставить, мало ли из башки вылетит - подгляжу... <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Евген)]]></author>
			<pubDate>Fri, 19 Aug 2011 16:25:41 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50753#p50753</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50752#p50752</link>
			<description><![CDATA[<div class="quotebox"><cite>Spy00000 пишет:</cite><blockquote><p>rem_type - тип напоминания (1 - однократное, 2 - в опр. день недели, 3 - в опр. день месяца, 4 - на третий день после очередного финансового кризиса, и т.д.)<br />rem_num (число) - доп. параметр, зависит от rem_type, для 1 - не используется, для 2 - день недели, когда срабатывать, для 3 - день месяца и т.д.)</p></blockquote></div><p><strong> для 1 - не используется</strong> - НЕТ !!!&nbsp; Тогда для rem_type=1 в rem_num должна стоять дата !</p>]]></description>
			<author><![CDATA[null@example.com (Евген)]]></author>
			<pubDate>Fri, 19 Aug 2011 16:24:03 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50752#p50752</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50751#p50751</link>
			<description><![CDATA[<p>А вычислять наверное надо не по следующей дате запуска напоминалки, а на сервачке утречком запустится скриптец и он в зависимости от типа задания определит принадлежность текущего дня к срабатываемым на него типам задания и с массивом подходящих типов пробежится по базе заданий для напоминания...</p>]]></description>
			<author><![CDATA[null@example.com (Евген)]]></author>
			<pubDate>Fri, 19 Aug 2011 16:21:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50751#p50751</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50750#p50750</link>
			<description><![CDATA[<p>Как тогда описать задание, с помощью этой структуры, если надо напоминание каждый вторник и каждую пятницу ?<br />Или к одному ID задания может сделать 2 записи ? - я вот подумал...&nbsp; &nbsp;тогда гибкости алгоритму прибавляется...&nbsp; &nbsp;<img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (Евген)]]></author>
			<pubDate>Fri, 19 Aug 2011 16:18:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50750#p50750</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50749#p50749</link>
			<description><![CDATA[<p>Ну вот, как вариант:<br />id - номер задания. Либо уникален, либо уникальна комбинация id, user_id.<br />user_id - id пользователя, для которого назначено напоминание<br />rem_type - тип напоминания (1 - однократное, 2 - в опр. день недели, 3 - в опр. день месяца, 4 - на третий день после очередного финансового кризиса, и т.д.)<br />rem_num (число) - доп. параметр, зависит от rem_type, для 1 - не используется, для 2 - день недели, когда срабатывать, для 3 - день месяца и т.д.)<br />rem_time - время напоминания в выбранный день.<br />date - дата очередного срабатывания.</p><p>Дальше поля зависят от того, как должно напоминаться.<br />Пока предположим - как в outlook, только текст, без всяких запусков внешних программ и прочего. Тогда просто:</p><p>text - текст напоминания.</p><p>Алгоритм работы такой:<br />При создании задания на основе текущей даты и rem_type, rem_num, rem_time выбирается дата очередного срабатывания.<br />К примеру: сегодня 2011-08-19, rem_type = 2, rem_num = 6 (суббота), rem_time = 15:00, тогда очередная дата срабатывания - 2011-08-20 15:00, что и заносится в date.</p><p>После чего таблица регулярно (раз в секунду, в 5 секунд, раз в месяц) проверяется и если у какого-то задания date &lt; текущей даты - выводится напоминание <br />и генерируется новая дата напоминания. Задания с rem_type == 1 просто удаляются.</p><p>Можно ввести ещё поле - активное или не активное задание, тогда задания с rem_type == 1 нужно не удалять, а делать неактивными.<br />Дальше - простор фантазии.</p><p>Дополнительно:<br />Если пользователь сам заходит на страницу, тогда проверять таблицу при входе пользователя.<br /></p><div class="quotebox"><cite>Евген пишет:</cite><blockquote><p>Подразумеваю что таблицы надо иметь как минимум 2, т.к. надо учесть 2 типа заданий: 1) бесконечное 2) с заданной датой начала и заданной датой окончания</p></blockquote></div><p>Если нужна дата окончания, я бы предложил держать всё в одной таблице, добавить флаг - &quot;есть дата окончания&quot;, поле &quot;дата окончания&quot; и при генерации очередной даты срабатывания проверять, чтобы она не была больше &quot;дата окончания&quot;, иначе делать задание неактивным.<br />А дату начала учитывать при генерации даты первого срабатывания.</p>]]></description>
			<author><![CDATA[null@example.com (Spy00000)]]></author>
			<pubDate>Fri, 19 Aug 2011 16:02:02 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50749#p50749</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50748#p50748</link>
			<description><![CDATA[<p>Собственно, процедура напоминания закладывается в html-код web-страницы или в специальное приложение для напоминания, установленное на компьютере пользователя?</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Fri, 19 Aug 2011 15:57:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50748#p50748</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50747#p50747</link>
			<description><![CDATA[<p>только либо эсаш либо пакетные файлы виндуз, иного не приемлю - ибо ренегад ))</p>]]></description>
			<author><![CDATA[null@example.com (smaharbA)]]></author>
			<pubDate>Fri, 19 Aug 2011 15:57:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50747#p50747</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50746#p50746</link>
			<description><![CDATA[<p>т.е. смысл в следующем...<br />каждый (из ~150 пользователей) может зайти на страничку WEB органайзера и с помощью нереального интерфейса, гибкой логики и хитрой структуры базы данных (которую я с Вашей помощью планирую придумать) смог бы себе сделать напоминалку о каком-нить событии.<br />Дык вот я затрудняюсь придумать такую структуру базы данных, чтобы там можно было запланировать любое напоминание...<br />Подразумеваю что таблицы надо иметь как минимум 2, т.к. надо учесть 2 типа заданий: 1) бесконечное 2) с заданной датой начала и заданной датой окончания</p>]]></description>
			<author><![CDATA[null@example.com (Евген)]]></author>
			<pubDate>Fri, 19 Aug 2011 15:46:29 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50746#p50746</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50745#p50745</link>
			<description><![CDATA[<p>Я вообще не очень въехал, что требуется. Что такое WEB органайзер? Кто назначает дату напоминаний? Что за база?<br />В общем, прошу пересказать более доступными словами.</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Fri, 19 Aug 2011 15:35:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50745#p50745</guid>
		</item>
		<item>
			<title><![CDATA[Re: Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50744#p50744</link>
			<description><![CDATA[<p>Нереальная задача, да ?</p>]]></description>
			<author><![CDATA[null@example.com (Евген)]]></author>
			<pubDate>Fri, 19 Aug 2011 15:12:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50744#p50744</guid>
		</item>
		<item>
			<title><![CDATA[Разработка структуры базы под алгоритм]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=50736#p50736</link>
			<description><![CDATA[<p>Коллеги, приветствую !<br />Давно мучает следующий вопрос оптимального всеобъемлющего варианта структуры базы под следующую задачу.</p><p>Разрабатываю WEB органайзер для ~150 пользователей, одной из его функций будет напоминалка по расписанию. Вот в этой напоминалке и застрял с разработкой структуры базы и своими хотелками... <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /><br />Хочу, много...&nbsp; &nbsp;хочу чтобы можно было напоминать по каждому дню недели, по каждому числу месяца, в заданный день года, по каждому понедельнику (дню недели), по каждому 20-му числу каждого месяца....&nbsp; вообще всяко хочу...</p><p>Но как под такую хотелку разработать структуру базы ?</p>]]></description>
			<author><![CDATA[null@example.com (Евген)]]></author>
			<pubDate>Thu, 18 Aug 2011 10:34:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=50736#p50736</guid>
		</item>
	</channel>
</rss>
