Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: вопрос по SQL  (Прочитано 647 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kostryukov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1588
  • everybody lies
    • Просмотр профиля
    • kostryukov.net
вопрос по SQL
« : 04 Февраля 2016, 08:52:15 »
Возможно реализовать?

Задача, каждый 8-часов (8-00, 20-00) вносить в таблицу новую запись, содержащую `дата время`, `номер смены`
смены чередуются следующим образом:
1, 2, 3, 4, 2, 1, 4, 3.
т.е. первые записи будут следующего вида:
(2016-02-02 8:00:00, 1)
(2016-02-02 20:00:00, 2)
(2016-02-03 08:00:00, 3)
(2016-02-03 20:00:00, 4)
(2016-02-04 08:00:00, 2)
(2016-02-04 20:00:00, 1)
(2016-02-05 08:00:00, 4)
(2016-02-05 20:00:00, 3)

необходимо учитывать количество дней в месяце.

Процедура должна запускаться каждый 8 часов, проверять прошлую смену, и добавлять новую строку в таблицу, со следующей по списку сменой
у меня можно спросить=)

Оффлайн cav

  • Любитель
  • *
  • Сообщений: 57
    • Просмотр профиля
    • Истории одного программера
Re: вопрос по SQL
« Ответ #1 : 04 Февраля 2016, 11:08:26 »
на python или perl скрипт
после чего его в крон
(Ubuntu 12.04, Ubuntu 10.04)
http://cavinc.blogspot.com/

Оффлайн kostryukov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1588
  • everybody lies
    • Просмотр профиля
    • kostryukov.net
Re: вопрос по SQL
« Ответ #2 : 04 Февраля 2016, 11:21:25 »
не, интересует вариант чисто на SQL
у меня можно спросить=)

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: вопрос по SQL
« Ответ #3 : 04 Февраля 2016, 11:57:46 »
kostryukov, а какая база?

В том же оракле есть свой шедулер - там можно таск зашедулить по типу того-же крона. Но если что-то слабенькое типа mysql то там такие вещи без cron не решить в принципе - ибо DB-энджин просто сам не умеет задачи по расписанию запускать (ну на сколько я знаю MySQL).

SQL сам по себе не подразумевает запуска запросов по расписанию - для этого используется либо внешний (CRON) либо встроенный шедулер.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн kostryukov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1588
  • everybody lies
    • Просмотр профиля
    • kostryukov.net
Re: вопрос по SQL
« Ответ #4 : 04 Февраля 2016, 12:02:18 »
а вот тут:

http://habrahabr.ru/post/123391/

делают по событию

Пользователь решил продолжить мысль 04 Февраля 2016, 12:03:40:
правильно ли  делаю процедуру ?
CREATE PROCEDURE `procedure3`()
BEGIN
  DECLARE varsm INT DEFAULT 1;
  DECLARE sm INT DEFAULT 1;
  DECLARE nsm INT DEFAULT 1;
 
SELECT smena.id AS varsm, smena.sm FROM smena INNER JOIN smdata ON smena.sm = smdata.smena ORDER BY smdata.dt DESC LIMIT 1
    IF varsm = 8 THEN
      INSERT INTO `smdata` (`dt`, `smena`) VALUES (DATETIME, '1');
ELSE
  SELECT smena.sm AS nsm FROM smena INNER JOIN smdata ON smena.sm = smdata.smena WHERE smena.sm=sm+1 GROUP BY smdata.dt;
  INSERT INTO `smdata` (`dt`, `smena`) VALUES (DATETIME, nsm);
    END IF;
END;

у меня можно спросить=)

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12130
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: вопрос по SQL
« Ответ #5 : 04 Февраля 2016, 12:05:17 »
kostryukov, ну так говорю же - я mySql не слишком хорошо знаю - если в нем есть шедулер - то да - лучше использовать встроенный в БД (хотя на этот счет могут быть и альтернативные мнения).

По поводу правильности процедуры и запросов - никто ничего не сможет сказать если не известна структура таблиц.

Как по мне так любые запросы проще отладить самому в интерактиве, а уже потом вкладывать их в процедуру и шедулить ее. Т.е. задачу надо разбивать на простейшие.
« Последнее редактирование: 04 Февраля 2016, 12:14:26 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн kostryukov

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1588
  • everybody lies
    • Просмотр профиля
    • kostryukov.net
Re: вопрос по SQL
« Ответ #6 : 04 Февраля 2016, 12:53:39 »
вот и разбиваю,
запросы отрабатывают,
создаю процедуру, что бы отладить ее запуск, уже потом шедулер.

сейчас вопрос в процедуре,
вот таблицы:


« Последнее редактирование: 04 Февраля 2016, 16:08:58 от kostryukov »
у меня можно спросить=)

 

Страница сгенерирована за 0.037 секунд. Запросов: 25.