• Что я не так делаю с транзакциями PHP MYSQL?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Вам нужны не просто транзакции, так как они гарантируют атомарность, а блокировки (LOCKING) чтобы гарантировать что до тех пор пока не завершится ваша транзакция другой процесс не сможет получить доступ к строке
    SELECT ... FOR UPDATE https://dev.mysql.com/doc/refman/8.0/en/innodb-loc...
    Ответ написан
  • Как правильно перебрать такой массив?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Если я все правильно понял, то у вас всего 5 кубиков и 3 варианта, на каком ходу зафиксировать кубик. Т.е. всего вариантов 3^5 = 243. Это очень мало - их можно все перебрать. Для этого надо или 5 вложенных циклов, или рекурсивная функция, которой передаются уже собранные числа в массиве, какой следующий кубик перебирать. Если еще не все 5 кубиков собраны, то функция гонит цикл из трех вариантов и для каждого дописывает текущий кубик к массиву, рекурсивно запускается, и удаляет последний кубик, чтобы откатить изменения для следующего варианта. Если все 5 кубиков выбраны, то текущий вариант оценивается и, если надо сохраняется.

    Тут советую написать отдельную функцию проверки, которая копирует массив (или принимает его по значению), сортирует его и тупо проверяет все варианты (Стрит - arr[0] == 1 && arr[1] == 2 ... && arr[4] = 6, пять одинаковых - все числа равыны. 2+3 - первое==второму, третье==пятому или первое==третьему, четвертое == пятому).
    Ответ написан
    2 комментария
  • Как подключиться по ssh к серверу и отобразить выполняющийся скрипт nodejs?

    martin74ua
    @martin74ua Куратор тега Linux
    Linux administrator
    изначально запускать скрипт в screen или tmux, которые при вашем отключении от консоли просто детачатся от нее, и при вашем следующем подключении к серверу вы можете подключиться к прежней сессии
    Ответ написан
    Комментировать
  • Как подключиться по ssh к серверу и отобразить выполняющийся скрипт nodejs?

    Зависит от того как этот скрипт запускается.
    • Если через systemd, то можно смотреть вывод через journalctl
    • Если запускается руками, то запуская через nohup вывод будет писаться в nohup файл текущей директории
    • Можно перенаправить вывод в файл npm run script.js >> /var/log/script.log
    • Ну и наконец, можно добавить логирование в файл в самом скрипте
    Ответ написан
    Комментировать
  • Как подключиться по ssh к серверу и отобразить выполняющийся скрипт nodejs?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    + к другим ответам, конкретно для ноды есть еще решение:
    Запускать через pm2 и потом смотреть логи тоже через него
    Ответ написан
    Комментировать
  • Выборка диапазона дат по двум столбцам из MySQL?

    @S-a-n-d-r-0
    Дан некий текущий месяц.
    Событие попадает, если
    1) его начало в текущий месяце;
    2) его конец в текущий месяце;
    3) его начало в месяце<текущего И конец в месце >текущего.
    Всего три случая. Значит нужен WHERE (1 условие) OR (2е условие) OR (3 условие).
    • Первое условие выполняется, если (start_time >= 01.НужныйМесяц.НужныйГод) AND (start_time < 01.НужныйМесяц+1.НужныйГод)
    • Второе - по аналогии, но только уже с end_time.
    • Третье - (start_time < 01.НужныйМесяц.НужныйГод) AND (end_time >= 01.НужныйМесяц+1.НужныйГод)


    Вот пример, как это можно сделать. Только очень корявый, т.к. написан на SQLite. На MySQL будет чуток по-другому, но смысл тот же. Тестировал на https://www.jdoodle.com/execute-sql-online/
    create table tab(id int, start text, end text);
    
    /* YYYY-MM-DD */
    insert into tab values(1, '2019-09-10', '2019-09-12');
    insert into tab values(2, '2019-08-07', '2019-11-12');
    insert into tab values(3, '2018-05-12', '2018-06-12');
    insert into tab values(4, '2018-01-12', '2019-03-12');
    insert into tab values(5, '2019-08-10', '2019-09-12');
    insert into tab values(6, '2019-09-10', '2019-10-12');
    insert into tab values(7, '2019-08-10', '2019-10-05');
    insert into tab values(8, '2019-08-10', '2019-08-12');
    insert into tab values(9, '2019-07-10', '2019-08-12');
    insert into tab values(10, '2019-09-30', '2019-10-01');
    
    select * from tab WHERE ((date(start) >= date('2019-09-01')) AND (date(start) < date('2019-10-01'))) OR ((date(end) >= date('2019-09-01')) AND (date(end) < date('2019-10-01'))) OR ((date(start) < date('2019-09-01')) AND (date(end) >= date('2019-10-01')));
    Ответ написан
    Комментировать
  • Выборка диапазона дат по двум столбцам из MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Интервалы НЕ пересекаются, тогда и только тогда, когда один из них находится после другого. То есть
    start2 > end1 || start2 > end1
    Но нам надо получить условие пересечения, то есть условие отрицания непересечения
    ~(start2 > end1 || start2 > end1) = 
    = ~(start2 > end1) && ~(start2 > end1) = 
    = start2 <= end1 && start2 <= end1

    Три условия от S-a-n-d-r-0 тоже можно привести в этот вид. Используйте булеву логику.
    Ответ написан
    Комментировать