![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Ребята, есть небольшая замарочка.
Теория: - Каждый месяц содержит неколько одинаковых дней недель. 4 Понедельника, 4 Вторника ......и даже бывают варианты что 5 Пятниц. Соответственно разбиваю логически на: Первый (First) Второй (Second) Третий (Third) Четвертый (Fourth) Последний (Last) Понятно, что Четвертый может быть и Последним. Не вижу логческого конфликта. Если делать стандартный запрос:
То проблем ни каких не возникает. А вот проверить это Третья ли среда месяца, или Четвертый четверг, или последняя пятница месяца не получается. Подскажите как проверить какой это по счету день недели, если колонка в таблице имеет название frequency и конечно все периуды имеют названия First, Second, Third, Fourth, Last. Это сообщение отредактировал(а) McDoc - 18.6.2014, 19:20 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
DAYOFWEEK(date) WEEKDAY(date) -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Спасибо, но примерно эти же команды я и расматривал. Но к сожалению не могу найти, как эти команды обчитывают (расчитывают). Плюс, программа обчитывает Слова как в месяце к примеру, или мне нужно ставить индексы (1, 2, 3 ... 5). Или как? К примеру если в месяце 4 пятницы, и я оставляю метку Червертая, она же может быть и последняя. Но как нить она может выпасть и на Пятой пятницей. Как работает алгоритм? Я хочу понять при забивке занных в таблицу. Кто знает, поясните. Это сообщение отредактировал(а) McDoc - 19.6.2014, 11:13 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Указанные функции позволят тебе получить день недели. Что же до номера недели в месяце... смотри. Если неделя начинается понедельником, достаточно тупо поделить номер дня на 7 (целочисельно, есссно), и номер недели у нас в кармане. А если не понедельником? допустим, вторником... давай добавим в первую неделю недостающий день - тогда можно спосойно делить на 7. А если среда? добавим два дня... Четверг? три... А сколько добавлять в общем случае? а надо просто узнать номер дня в неделе для первого дня месяца! Конечный алгоритм получается такой. Берём нужную дату. Отнимаем от неё (date_sub) столько дней, каков номер дня (day) этой даты - получаем день перед первым числом этого месяца. Спрашиваем, а какой это по номеру день недели (dayofweek). Полученное число добавляем (date_add) к номеру дня (day) нужной даты. И делим полученное на 7. Всё, у нас в руках номер недели. Возможно, там ещё надо будет прибавить или отнять единицу-другую - но думать лениво. Сам проверишь и определишь, надо или нет, а если надо, то что именно. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Вчера убил подня на решение проблемы, но она пока не решена.
Вопрос № 1, как переодичность декларировать в таблице? First или 1 Second или 2 ..... или 3 ..... или 4 А как же декларировать Last ??? |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Никак. Это не данные, а их интертрепация на клиенте. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Смотри, вот пример:
![]() Вот мы отмечаем Последний понедельник первого месяца. Но столь важно, номер месяца. Важно Последний... Понедельник. Он же какие то данные отправляет в таблицу! Мне нужно создать тоже подобное. Что бы потом изтаблицы выводить на экран. Добавлено через 11 минут и 23 секунды В этом году в частности, последний понедельник - Он является началом шестой недели месяца. Не важно, что в этой неделе месяца один день. Но шестая! ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Ну да, отправляет... вот прямо так и отправляет - код дня (напр., 1 == Monday) и код недели (напр. 21 == Last)... и что? коды назначай сам. И интерпретируй их обратно тоже сам. В частности, чтобы проверить, что некая дата является последним понедельником месяца, нужно а) убедиться, что это понедельник, используя соотв. функцию; б) убедиться, что он последний - добавить неделю и сравнить месяц, он должен измениться... по результатам проверки вернёшь True либо False. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Не то!
День недели норма. DayOfWeek - он работает отлично. Я наверное не могу толкм объяснить, попробую картинками. Вот шапка таблицы: ![]() Вот две тестовые записи, в одно номер недели в другом слово. ![]() Отлично, есть две записи. далее простенький тестовый запрос:
Получаем выборку, в ней одна запись. Значит Использование номера а не слова правильно! Неделя 4-ре сейчас, и в будущем если нам нужно вызвать неделю 4-ре мы забиваем в таблицу номер 4. Супер! ![]() Эта задача с номером недели решена отлично! Теперь представим, у нас Форма отправки в таблицу: С какого деня стартует - 21-06-2014 Что произойдет - Совещание у шефа Время - 10-00 День недели - Пятница (у нас в таблицен будет аргумент 6) Чястота - Послденяя Месяц - Август - он идет как Август, запрос как MONTHNAME Все аргументы понятно как улетят в таблицу, а что должно отправиться в таблицу как Последняя? Это сообщение отредактировал(а) McDoc - 20.6.2014, 12:24 |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Код, который соответствует слову (термину, понятию) "Последняя". Этот код будет скормлен пользовательской функции в секции WHERE. И если указанная (или, как я понял, выбранная из поля записи) дата пройдёт проверку в функции, та вернёт True, и запись попадёт в отбор, иначе нет. Вот и всё. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
McDoc |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Отлично.
Помоги сделать проверку вставки в таблицу:
Вот вместо Last написать функцию проверки. Я нифига не могу понять..... Так как это все будет вставляться через РНР старницу.
Это сообщение отредактировал(а) McDoc - 20.6.2014, 12:45 |
||||
|
|||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
А тебе точно надо "проверить, что выполнена вставка в таблицу"? тогда просто вызови какой-нить affected_rows()... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Мне без разницы что улетит в таблицу.
Сейчас пытаюсь найти код пример "проверки последней недели в месяце". Как я понял из твоего поста там будет типа 'Last' = dnso >hvbsk - 7 or hbvsi <>0 (и вот это пока бредовое выражение полетит в таблицу, как я понял - если это верно) |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Ну или в более общем случае
Это сообщение отредактировал(а) Akina - 20.6.2014, 13:26 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
McDoc |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Спасибо.
Мне кажется очень близко, но все равно, где то ошибка. 1 - Сменил Дату на компе, на 27-июня - Последняя пятница этого месяца ![]() Обновил одну из записей, добавл вместо номера недели код:
Имею: ![]() 4 записи: 1 - с Fourth 2 - c 4 3 - c Last 4 - c кодом Делаю запрос:
![]() Какого хрена он выводит запись для Четвертой недели, когда сейчас пятая (по компу) - не понимаю (((( |
||||
|
|||||
Akina |
|
||||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Я поправил опечатку. Но и тебе надо бы думать, а не тупо копипастить... не правда ли, будет странно, если ровно через неделю будет не тот же день недели... Добавлено через 2 минуты и 6 секунд
Последняя пятница и пятница последней недели - вовсе не одно и тоже... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||
|
|||||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Akina - Спасибо тебе за помощь, но ты можешь толком объяснить, что куда вставляется?
Вот эта часть кода в таблицу, вместо так называемого Last?
Я не могу понять откуда ты посылаешь WHEN 'First' или WHEN 'Last' - это по идее если ты выбираешь Last or First. И я уже мозг поломал, что значит Последняя пятница и пятница последней недели вовсе не одно и тоже. Ты имел в виду что последняя пятница - это последняя пятница года? Это мой первый опыт с подобным, и до супер пупер пользования SQL мне далеко, а задания нужно выполнять. Я понимаю, ты тратишь свое время, но ты можешь написать Step by Step? Что за чем? |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Не-а... ведь до сих пор не поставлена строгая задача. То тебе хранить, то проверять, то выбирать, то вообще неясно что... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
McDoc |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Спасибо, за еще за одну науку. 1 - Есть готовая ДБ. 2 - Есть колонна frequency в которой прописывается аргумент (номер недели 1, 2, 3, 4) 3 - Какой аргумент соответствует последней недели Last? Так как последний может быть 4, 5 или даже 6 Нужно для начала выправить запрос. Который уже есть (если он неправильный), или написать, какой аргумент нужно поместить в таблицу в колонку frequency, что бы он соответствовал ПОСЛЕДНЕЙ недели месяца.
|
||||
|
|||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Нормально так... это уже ТЫ должен определить, что там будет стоять, если данное задание следует выполнять в последнюю неделю. Т.е. например так:
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Хорошо.
Для упрощения возьмем: Неделя - Аргумент 1 - 1 2 - 2 3 - 3 4 - 4 5 - 5 Last - 21 Так как WEEKDAY - понимает только цифры - http://dev.mysql.com/doc/refman/5.6/en/dat...unction_weekday - верно ли это? Когда пользователь в Форме (форма на странице HTML и РНР) выбирает Неделя 1, 2, 3, 4, 5 или Last (для отправки данных в таблицу) - у нас в таблицу идет аргумент 21. Верно? На данный момент мы имеем таблицу и в ручную вносим аргумент 21. ![]() У нас имеется три записи на Понедельник: 1 - Понедельник (2) пятой недели (5) Июня (June) 2 - Понедельник (2) последней недели (21) Июня (June) 3 - Понедельник (2) четвертой недели (21 Июня (June) ![]() Сегодня 23 Июня 2014 года. Понедельник - Пятая неделя. Запускаем запрос: ![]() И результат НОЛЬ - ничего не выводит Меняем дату на 30-06-2014 (шестая неделя), снова запускаем запрос: ![]() результат так же ноль!!! Меняем дату на 16-06-2014 (четветая неделя), запускаем запрос: ![]() Результат НОЛЬ. В чем проблема? Где ошибки? Все точно расписал? |
|||
|
||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Небольшое уточнение, которое ни где не прочитать:
- Любой месяц и отчет недель месяца начинается с понедельника - Если 1-е число любого месяца выпадает на Воскресенье или Субботу эти дни относятся к неделе прошлого месяца Блин, пока не столкнулся, нифига не знал! |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Да, верно. Мы просто кодируем информацию тем способом, который считаем удобным. Причём в данном случае удобным не только нам (нам по большому счёту сиренево, числа там или слова), но и серверу (ему проще, быстрее и естественнее работать с целыми числами, чем со строками). Угу. Клиентская часть с этим вполне справится - заменой строки Last на число 21. Кстати, и с остальными значениями будет то же самое - на экране отображается строка "1", а серверу передаётся соответствующее этой строке число 1. Пусть они выглядят внешне одинаково, но тип у них разный. Не-не-не... это беллетристика. Давай ставить ЗАДАЧУ. То есть формализовать весь этот словесный хлам и получать ТЗ. Типа: Итак, имеется таблица (тут должен быть приведён соответствующий CREATE TABLE ...). В ней имеются записи (а тут - соответствующий INSERT ... VALUES ...). Имеется некая дата. Например, текущая. Или некая заданная. Задача - вывести из таблицы те записи, которые соответствуют указанной (то есть сегодняшней или заданной) дате. Т.е. попадают в диапазон полей начало-конец, и соответствуют деформализованному номеру недели. Добавь в это дело все (абсолютно все!) тонкости и условности, чтобы исключить ЛЮБЫЕ непонятности либо разночтения (включительно или невключительно заданы интервалы, как считать номер недели и пр.) - и тогда можно будет приступать к решению задачи. Добавлено через 1 минуту и 8 секунд
А если, например, на среду, то что есть "первая неделя"? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Возьму перерыв..... топчусь рядом....
Пока возьмусь за несколько другу работу. И по ней вопросы в другой теме.... |
|||
|
||||
McDoc |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Вместо того, что в ручную забивать данные в таблицу, решил отправить из через форму, так проще по ходу будет, что бы код сам послал аргумент, ну а после запрос из таблицы можно составить.
И так, есть форма ![]() Все работает отлично. Кроме двух элементов. Вначале о наболевшем. Frequency - выбираем First - в талицу отпраляется 1, и так далее. Так как при запросе из БД weekday понимает только НОМЕР, а не слово - мне нужно как то послать аргумент Last. WEEKDAY идеально читает номера недель как 1, 2, ... 5. Если выбрать Every - я не еще не уверен, либо по умолчанию должно в таблице быть NULL либо пробовать как NULL слово отправить. И так код:
и отправка в таблицу
и запрос отправки в таблицу:
/Выбрал First - иденичка летит в талицу, а вот... Last and Every... проблематичней. |
||||||
|
|||||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
По ходу тут нужно использовать временную метку... - http://www.php.net/manual/ru/function.strtotime.php - хотя до конца еще не уверен.
Есди ее использовать, то по идее мне как то надо собрать дату до кучи, из того что есть. Меня интересует как пример - Последняя Пятница Января вне зависимости от года. Но получается фигня какая то. Если привязывать к конкретной дате - более понятно... Но к абстрактной, не выходит. Как пример:
Что выходит... 1403820000 1403906400 1404079200 1401055200 Последние два значения должны быть одинаковыми... Какой то тупиковый путь (((( |
|||
|
||||
McDoc |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Решено!
Кому надо пользуейтесь:
А вот запрос... Вот где фишка - а не в аргументе.
Akina, - умный(ая) простите не имею чести знать, но все таки до конца сам(а) не знал(а) ответа. |
||||
|
|||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Радуйтесь, что tangir-у оказалось не лень разбираться в Вашем "потоке сознания".
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
McDoc |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 30 Регистрация: 23.11.2011 Где: Dublin Репутация: нет Всего: нет |
Он единственный кому не надо было делать уточнения, и не требовал дополнений.
Отлично и быстро направил. |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |