Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проверка номера недели в месяце или запись в таблицу / 6 сообщений из 6, страница 1 из 1
30.06.2014, 14:14:40
    #38683725
Mc Doc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка номера недели в месяце или запись в таблицу
Ребята, есть большая заморочка.

Теория:
- Каждый месяц содержит неколько одинаковых дней недель. 4 Понедельника, 4 Вторника ......и даже бывают варианты что 5 Пятниц.

Соответственно разбиваю логически на:
Первый (First)
Второй (Second)
Третий (Third)
Четвертый (Fourth)
Последний (Last)
Каждый (Every) - то есть каждый понедельник месяца к примеру.

Понятно, что Четвертый может быть и Последним. Не вижу логческого конфликта.

Есть таблица:



И есть форма отправки данных в таблицу, код выложу ниже:



Как видно в таблице есть колонка frequency - частота. Туда и записывается Первый, Второй,Третий.... Последний и Каждый. Занесем данные в таблицу (всечто есть в скриншоте):



Занеслось отлично! Корректно. В колонку frequency занеслась еденица, что соответствует Первому Понедельнику Декабря.

Теперь нам надо занести Last или Every. Как ??? не знаю.

Есть код:
Выбор Названия, и занесение параметра:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Friquency
            <select name="frequency">
			<?php
			    $frequency = array("First","Second","Third","Fourth","Last","Every");
			    $frequ_val = array("1","2","3","4","Last","Every");
			        for($fr=0; $fr<6; $fr++){
			        echo "<option value=\"".$frequ_val[$fr]."\">".$frequency[$fr]."</option>"; 
			    }
			?>
            </select>



Выбрали, один из пунктов. Сейчас интересует только Last and Every.
Проверяем... и посылаем в таблицу
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
$frequency = isset($_POST['frequency'])?($_POST['frequency']):'';

if($_POST['frequency']=="Last")
	        {
				echo ""; - // вот тут должна быть проверка и посыл аргумента.
	        }
	    		elseif($_POST['frequency']=="Every")
	        {
	            $peremennaja = $_POST['0'];  // Тут тоже проверка и каркуляция. Ноль - не правильно.
	        }
	   			else	
	        {
	            $peremennaja = $_POST['frequency'];
	        }



Frequency - выбираем First - в талицу отпраляется 1, и так далее. Так как при запросе из БД weekday понимает только НОМЕР, а не слово - мне нужно как то послать аргумент Last. WEEKDAY идеально читает номера недель как 1, 2, ... 5.
Если выбрать Every - я не еще не уверен, либо по умолчанию должно в таблице быть NULL либо пробовать как NULL слово отправить.

Помогите дописать эти функции.
...
Рейтинг: 0 / 0
30.06.2014, 16:28:51
    #38683892
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка номера недели в месяце или запись в таблицу
Mc Doc,

а что тут думать? last=6, every=7. в нужных запросах предусмотреть соответствующую обработку.
...
Рейтинг: 0 / 0
30.06.2014, 16:39:33
    #38683913
Mc Doc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка номера недели в месяце или запись в таблицу
Хорошо. То есть будет выглядить так:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Friquency
            <select name="frequency">
			<?php
			    $frequency = array("First","Second","Third","Fourth","Last","Every");
			    $frequ_val = array("1","2","3","4","6","7");
			        for($fr=0; $fr<6; $fr++){
			        echo "<option value=\"".$frequ_val[$fr]."\">".$frequency[$fr]."</option>"; 
			    }
			?>
            </select>



Отлично!

Дальше просто послать парметр в таблицу.
Тогда как обработать запрос?????

если:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Query Monthly

SELECT  `description` AS  'Task', DATE_FORMAT( current_date,  '%d %b %y' ) AS  'Current date',  `start_time` AS  'Time'
FROM tasks
WHERE  `code` LIKE  'monthly'
AND  `start_time` > current_time
AND  `exp_day` >= current_date
AND  `day_of_week` = DAYOFWEEK( current_date ) 
AND  `month_of_year` = MONTHNAME( current_date ) 
AND `frequency` = WEEKDAY (current_date)
ORDER BY  `start_time`
...
Рейтинг: 0 / 0
30.06.2014, 16:49:42
    #38683933
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка номера недели в месяце или запись в таблицу
Mc Doc
Код: sql
1.
AND `frequency` = WEEKDAY (current_date)

заменить на что-то типа
Код: sql
1.
2.
3.
4.
5.
AND (case 
 when `frequency` in (1,2,3,4,5) then `frequency` = WEEKDAY (current_date)
 when `frequency`=7 then true
 when `frequency`=6 then DAY(current_date)>DAY(date_add(current_date,interval 1 week))
 end)

случай 6 - проверка, что следующий такой день - уже в новом месяце (а значит, текущий - последний из нужных)
...
Рейтинг: 0 / 0
30.06.2014, 17:08:31
    #38683963
Mc Doc
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка номера недели в месяце или запись в таблицу
tanglir,
Вы просто ГУРУ MY SQL!!!!
Огромное спасибо за помощь!!!
...
Рейтинг: 0 / 0
30.06.2014, 19:35:23
    #38684131
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка номера недели в месяце или запись в таблицу
Mc Doc,

вариант миксофта в соседней теме может оказаться быстрее
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Проверка номера недели в месяце или запись в таблицу / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]