• Как при INSERT задать значение поля на основе PRIMARY KEY?

    Лентюй, ну так триггер и вперед...
    изначальная задача НЕИЗВЕСТНА же!
    но это как вариант ответа.
    может там ОДНА транзакция со вставкой (загрузкой) данных??

    или автокомит )
  • Как при INSERT задать значение поля на основе PRIMARY KEY?

    Лентюй, может быть ))
    я же написал -
    Но, это не точно

    а ПЕРЕД этим про триггер...
  • Как правильно составить OR с REPLACE в SQL?

    Никита Гуриев, уже писал же...

    Adamos, вообще-то так:

    SELECT
        REPLACE(REPLACE(authorid, ', Линус Торвальдс', ''), 'Линус Торвальдс, ', '') AS coauthors
      FROM books
      WHERE authorId LIKE '%Линус Торвальдс%'


    или так:
    SELECT
        GROUP_CONCAT(
          REPLACE(REPLACE(authorid, ', Линус Торвальдс', ''), 'Линус Торвальдс, ', '')
        )AS coauthors
      FROM books
      WHERE authorId LIKE '%Линус Торвальдс%';
  • Как можно оптимизировать и сократить данный код?

    Вот не понимаю... вы либо на нативном JS пишите либо на JQuery, зачем все перемешивать??
  • Как обновлять таймер по клику?

    Genri_Rus, так же как и в первоначальном примере из обработчика.
  • Как обновлять таймер по клику?

    Genri_Rus, нет, вы не завернули обработку в обработчик, извиняюсь за туфтологию.
    см. первоначальный код, он всего лишь не сильно меняется по комментариям.

    ну и вот это вот зачем??
    items[name] = new Item(name, $html.find('.-notification-timer'));
    
    items[name] = $html.find('.-notification-timer');


    либо первое , либо второе.

    в первом случае в массив items добавляется объект Item с ключом = хешу
    во втором в массив items добавляется элемент-ссылка на timer с ключом = хешу

    либо то , либо это.
    я за второе, объект тут не нужен пока.
  • Как обновлять таймер по клику?

    Genri_Rus, да где хотите, либо в прямо в HTML его явно укажите, как у меня в самом первом примере, тогда разумеется в функции обработчике его не надо вставлять, либо как я писал уже выше:

    // внутри функции обработчика
    // добавляем контейнер для таймеров в DOM если его не существует
    if (!$('.timers_container').length) {
      $('body').append('<div class="timers_container"></div>');
    }


    ну класс на свой поменяете.
    т.е. если элемента с таким селектором как в условии нет, то он добавится, если есть, то ничего не будет делаться.
  • Как найти в базе по ключевому запросу в нескольких строчка?

    urajo, исправьте запрос в вопросе.

    а просто сам скл запрос с нужной искомой строкой в mysqladmin или где там еще отрабатывает, есть результат?
    можно уже данные и искомую строку увидеть?
  • Как правильно составить SQL запрос? Работа с Like?

    Никита Гуриев,
    Вы про синтаксис SELECT FROM почитайте.
    OR не может использоваться так как вы его используете, OR используется ТОЛЬКО в условии WHERE
    для того чтобы получить то что вы хотите необходимо либо "каскадно реплейсить"
    REPLACE(REPLACE(REPLACE(athorid, ...) ... )... )

    либо использовать регулярные выражения, но они есть только в MySQL 8
  • Как найти в базе по ключевому запросу в нескольких строчка?

    urajo, потому что у вас в запрос неправильно вставляется переменная `$search`
    ну и какое значение в переменной $search и в каком либо поле которое должно как бы находиться?
  • Вложенный SELECT mySQL почему не работает?

    Adamos, Все же думаю что наоборот надо
    AND m2.state = 'ПУСК' 
    AND m1.state = 'СТОП'


    (СТОП же происходит после ПУСКа :)), а у вас m2.num > m1.num
    так:

    AND m1.state = 'ПУСК' 
    AND m2.state = 'СТОП'
  • Как обновлять таймер по клику?

    Genri_Rus, просто это как-то лаконичнее, хеш, в зависимости от функции (алгоритмов), достаточно точно идентифицирует (определяет) захешированные данные.
    Ну и ключи массива будут компактнее и вменяемые, а не из мешанины текста и спецсимволов. да и как писал раньше возможно неадекватное поведение массива с ключами в которых есть спецсимволы (например перенос строки) и т.п.

    см. Хеш-функция
    и пр. в гуглопоиске...
  • Как обновлять таймер по клику?

    Genri_Rus, можно конечно, так и было изначально.
    просто в хеше нет никаких спецсимволов, только латинские и цифры (возможно это принципиально для наименования элемента массива (свойства объекта)) и он имеет конечную фиксированную длину, в отличии от сообщения, которое может в принципе весить килобайты.... и более ))
  • Как обновлять таймер по клику?

    Genri_Rus, пользуйтесь любой удобной для вас, но имхо, это тяжелые паровозы, вполне достаточно той что приводил выше:
    https://www.queness.com/code-snippet/6523/generate...

    или вам обязательно надо с CDN тянуть??
  • Как обновлять таймер по клику?

    добавьте к обьекту Items поле в котором вы будете хранить таймер, и через это поле получайте доступ к нему. Тогда идентификатор не будет нужен


    И об этом я тоже писал:
    а если без id, то необходимо составлять сложный объект , хранить ссылки на DOM блоков-контейров сообщений и работать с этим объектом, как-то так.


    Но от "идентификатора" все равно никуда не деться, в данном контексте это не id товара, это некий идентификатор DOM элементов, за который выступает либо сам текст, либо его хэш, так же этот идентификатор используется И в списке объектов (элементов массива) выводимых сообщений.

    вот примерно как-то так.
    в получаемом HTML (перменная data) вообще никаких изменений не делается. ссылка на таймер заносится в массив и из него же достается по ключу-хешу от текста сообщения.
    let Item = function(name, timer) {
      this.name = name;
      this.timer = timer;
    }
    
    const items = [];
    
    // ....
    // ....
    
    // создаем JQuery объект из полученного HTML
    let $html = $(data);
    
    // подключите библиотеку отсюда
    // https://www.queness.com/code-snippet/6523/generate-md5-hash-with-javascript
    
    // получаем имя = текст из блока .inline-block.-notification-text
    let name = calcMD5($html.find('.inline-block.-notification-text').text());
    
    // передаем в объект Item хэш текста сообщения и ссылку НА таймер
    items[name] = new Item(name, $html.find('.-notification-timer'));
    
    // либо просто в массиве
    items[name] = $html.find('.-notification-timer');
    
    // ...
    
    // соответственно по тексту сообщения/хеша,
    // получаем элемент из списка объектов, хотя не знаю зачем так можно вообще просто:
    // items[name] = $html.find('.-notification-timer');
    // т.е. опять голый массив.
    
    function startTimer(name) {
      let $timer =  items[name]; // либо если объект - items[name].timer
      $timer.stop();
      $timer.css("width", "100%");
      $timer.animate(
        {width: 0},
        {duration: 10000,
         complete: function() {
           $(this).closest('.notice__info').remove();
           delete items[name];
           console.log(`Удален ${name}`);
         }
        }
      );
    }
    
    
    
    $(document).on('click', '.notice__delete', function() {
      let $timer = $(this).siblings().find('.notice__timer');
      let name = calcMD5($(this).siblings().find('.inline-block.-notification-text').text());
      $timer.stop();
      $(this).parent().remove();
      delete items[name];
    });
  • Как обновлять таймер по клику?

    Genri_Rus, я же говорю, идентификаторы навешиваются после получения сообщения, на шаблон, что на той странице, что у меня (я писал в комментарии как) и в обоих случаях как идентификатор выступает собственно сам текст сообщения, только на той стронице он прогоняется через sha1 и хранится как hash (просто hash короче всего сообщения и в нем только латинские буквы и цифры) все это делается на js и снаружи вообще пофиг, есть они нет. в аякс можете передавать все что и передавали и как передавали раньше.

    // создаем JQuery объект из полученного HTML
    let $html = $(data);
    
    // получаем имя = текст из блока .inline-block.-notification-text
    let name = $html.find('.inline-block.-notification-text').text();
    // добавляем в items данный name
    items[name] = 1;
    // устанавливаем аттрибут data-name в полученном "таймере"
    $html.find('.-notification-timer').data('name', name);
    
    // ...
    // добавляем "таймер" в контейнер
    $('.timers_container').append($html);
    
    // стартуем таймер


    можно так же хешировать текс и писать в name его хеш, но тогда надо подключать внешние библиотеки для хеширования.
  • Как обновлять таймер по клику?

    Genri_Rus, а оно работает? чем не устраивает работающий вариант?
    и что вы уперлись в эти id? я вам представил различные варианты, дальше развивайте.
    а если без id, то необходимо составлять сложный объект , хранить ссылки на DOM блоков-контейров сообщений и работать с этим объектом, как-то так.
    Как еще находить то DOM элементы , если у них одинаковые классы и пр.???

    Вам надо сложнее?

    вот объект работающий с сообщениями с той страницы:
    spoiler
    var ntNotification = {
      templates: {},
      notifications: [],
      getTemplate: function(e, t) {
        var i = this;
        this.templates[e] ? t(i.templates[e]) : $.get("/html/ru_RU/utils/notification.html", function(n) {
          i.templates[e] = n, t(i.templates[e])
        })
      },
      getTop: function(e) {
        return parseInt(e.css("top").replace("px", ""))
      },
      moveAll: function(e, t) {
        var i = this;
        _.forEach(i.notifications, function(n, o) {
          if (o >= e)
            if (e != o) {
              var a = i.notifications[o - 1].elm;
              t = t + a.outerHeight() + 5, n.elm.animate({
                top: t + "px"
              }, 200)
            } else n.elm.animate({
              top: t + "px"
            }, 200)
        })
      },
      deleteNotification: function(e, t) {
        var i = this,
          n = _.indexOf(i.notifications, e),
          o = i.getTop(e.elm);
        e.timeout && clearTimeout(e.timeout), i.notifications = _.without(i.notifications, e), e.elm.stop(!0, !0), t ? e.elm.animate({
          left: e.elm.width() + "px",
          opacity: 0
        }, 200, function() {
          e.elm.remove(), i.moveAll(n, o)
        }) : e.elm.animate({
          top: o - e.elm.outerHeight() + "px",
          opacity: 0
        }, 200, function() {
          e.elm.remove(), i.moveAll(n, o)
        })
      },
      shake: function(e) {
        for (var t = 0; t < 6; t++) $(e).animate({
          "margin-left": t % 2 == 0 ? 5 : -5
        }, {
          duration: 70,
          queue: !0
        });
        $(e).animate({
          "margin-left": 0
        }, 70)
      },
      getPageX: function(e) {
        var t = 0;
        if ("touchstart" == e.type || "touchmove" == e.type || "touchend" == e.type || "touchcancel" == e.type) {
          t = (e.originalEvent.touches[0] || e.originalEvent.changedTouches[0]).pageX
        } else "mousedown" != e.type && "mouseup" != e.type && "mousemove" != e.type && "mouseover" != e.type && "mouseout" != e.type && "mouseenter" != e.type && "mouseleave" != e.type || (t = e.pageX);
        return t
      },
      show: function(e, t, i) {
        var n = this,
          o = CryptoJS.SHA1(t).toString(),
          a = _.findWhere(n.notifications, {
            id: o
          }),
          r = !_.isUndefined(i) && i;
        if (a) {
          if (a.elm.stop(!0, !0), n.shake(a.elm), a.timeout) {
            clearTimeout(a.timeout);
            var s = a.elm.find(".-notification-timer");
            s.stop(!0, !0), s.css({
              width: ""
            }), s.animate({
              width: 0
            }, a.time), a.timeout = setTimeout(function() {
              n.deleteNotification(a)
            }, a.time)
          }
        } else this.getTemplate(e, function(a) {
          window.view && window.view.translate && (t = window.view.translate(t));
          var s = {
            id: o,
            elm: $(_.template(a)({
              type: e,
              message: t,
              hasTimer: r
            }))
          };
          if (s.elm.data("id", o), n.notification_box || (n.notification_box = $('<div class="-notification-box"></div>'), $(document).on("click", ".-notification-close, .-notification-box .-notification-icon", function() {
              var e = _.findWhere(n.notifications, {
                id: $(this).parent().eq(0).data("id")
              });
              e && n.deleteNotification(e)
            }), $(document).on("touchstart", ".-notification", function(e) {
              var t = _.findWhere(n.notifications, {
                id: $(this).data("id")
              });
              t.elm.css("left", 0);
              var i = n.getPageX(e),
                o = t.elm.offset();
              $(document).on("touchmove.notification", function(e) {
                var a = n.getPageX(e),
                  r = a - i;
                r > 0 ? t.elm.css({
                  left: r + "px"
                }) : o.left < a ? i = a : $(document).off("touchmove.notification touchend.notification"), r > 100 && ($(document).off("touchmove.notification touchend.notification"), n.deleteNotification(t, !0))
              }), $(document).on("touchend.notification", ".-notification", function() {
                t.elm && t.elm.css({
                  left: 0
                }), $(document).off("touchmove.notification touchend.notification")
              })
            }), n.notification_box.css({
              top: 0
            }), $("body").append(n.notification_box)), s.elm.css({
              opacity: 0,
              top: 0
            }), n.notification_box.append(s.elm), 0 != n.notifications.length) {
            5 == n.notifications.length && n.deleteNotification(n.notifications[n.notifications.length - 1]);
            var c, d = function() {};
            _.forEach(n.notifications, function(e, t) {
              if (t == n.notifications.length - 1 && (d = function() {
                  s.elm.animate({
                    opacity: 1
                  }, {
                    duration: 100,
                    queue: !0
                  })
                }), 0 != t) {
                var i = n.notifications[t - 1].elm;
                c = c + i.outerHeight() + 5, e.elm.animate({
                  top: c + "px"
                }, 100, d)
              } else c = s.elm.outerHeight() + 5, e.elm.animate({
                top: c + "px"
              }, 100, d)
            })
          } else s.elm.animate({
            opacity: 1
          }, 100);
          n.notifications.unshift(s), r && (s.time = i, s.elm.find(".-notification-timer").animate({
            width: 0
          }, i), s.timeout = setTimeout(function() {
            n.deleteNotification(s)
          }, s.time))
        })
      },
      showError: function(e, t) {
        t = _.isUndefined(t) ? 5e3 : t, this.showMessage(e, "error", t)
      },
      showWarning: function(e, t) {
        t = !0 === t && 5e3 || t, this.showMessage(e, "warning", t)
      },
      showSuccess: function(e, t) {
        t = _.isUndefined(t) ? 5e3 : t, this.showMessage(e, "success", t)
      },
      showMessage: function(e, t, i) {
        var n = this;
        if (t = t || "error", i = _.isUndefined(i) ? "warning" == t ? 0 : 5e3 : i, /^\/[a-z]+/.test(e)) {
          var o = $("body").data("lang");
          $.get("/html/" + o + e, function(e) {
            n.show(t, e, i)
          })
        } else n.show(t, e, i)
      }
    };


    и кстати Idшники там формируются - Это SHA1 от текста сообщения:

    //........
          o = CryptoJS.SHA1(t).toString(),
          a = _.findWhere(n.notifications, {
            id: o
          })
    //........ потом навешиваются
           s.elm.data("id", o)
    // далее использование:
    $(document).on("click", ".-notification-close, .-notification-box .-notification-icon", function() {
              var e = _.findWhere(n.notifications, {
                id: $(this).parent().eq(0).data("id")
              });
    // ...
    $(document).on("touchstart", ".-notification", function(e) {
              var t = _.findWhere(n.notifications, {
                id: $(this).data("id")
              });


    в принципе у меня почти тоже самое, только гораздо проще см. мой комментарий:
    const items = [];
    
    // ...............
    // ...............
    
    // добавляем контейнер для таймеров в DOM если его не существует
    if (!$('.timers_container').length) {
      $('body').append('<div class="timers_container"></div>');
    }
    
    // создаем JQuery объект из полученного HTML
    let $html = $(data);
    
    // получаем имя = текст из блока .inline-block.-notification-text
    let name = $html.find('.inline-block.-notification-text').text();
    // добавляем в items данный name
    items[name] = 1;
    // устанавливаем аттрибут data-name в полученном "таймере"
    $html.find('.-notification-timer').data('name', name);
    
    // ...
    // добавляем "таймер" в контейнер
    $('.timers_container').append($html);
    
    // стартуем таймер
    // ...


    текст сообщения как идентификатор в data-name, можно его в sha1 прогонять.
    можно не хранить так называемый "идентификатор" (прямой ли текст сообщения или sha1) в аттрибутах элемента, НО тогда искать надо по textContent елемента, что просто УСЛОЖНЯЕТ операцию поиска, а зачем??

    PS: вам надо сложнее? напишите сами...