• Как отфильтровать таблицу по столбцу значение которого входит/не входит в список значений?

    @alexalexes
    Вариант 1:
    Пришить NOT в текст запроса, в зависимости от состояния p1:
    "SELECT * FROM [dbo].[data] WHERE ([dbo].[data].[intField] " + (p1 ? "" : "NOT") + " IN (0,1,2,8,9))"

    Вариант 2, если MS SQL поддерживает тип bool в SQL, то такое выражение:
    SELECT * FROM [dbo].[data]
          WHERE @p1 = true and [dbo].[data].[intField] IN (0,1,2,8,9)
                  or @p1 = false and [dbo].[data].[intField] NOT IN (0,1,2,8,9)

    Вариант 2.1, если MS SQL не поддерживает тип bool в SQL, то нужно p1 придать значение 0/1 вместо false/true, тогда выражение:
    SELECT * FROM [dbo].[data]
              WHERE @p1 = 0 and [dbo].[data].[intField] IN (0,1,2,8,9)
                      or @p1 = 1 and [dbo].[data].[intField] NOT IN (0,1,2,8,9)
    Ответ написан
    Комментировать
  • Подойдёт ли ssd к моему ноутбуку?

    @alexalexes
    Для SSD потребление тока не принципиально, тем более если вы заменяете что-то на интерфейсе SATA ноутбучного размера (2,5 дюйма).
    Ответ написан
    Комментировать
  • Можно ли задать ширину блоку относительно родителя предыдущего?

    @alexalexes
    Можно, но вам придется поломать вложенность зеленого блока в синий блок с помощью свойства position.
    Красному блоку дать свойство:
    position: relative
    Зеленому блоку дать свойство:
    position: absolute
    Ответ написан
  • Как задать второе значение переменной если 1 не найдено?

    @alexalexes
    if(isset($gorod))
    {
      $city = $gorod;
    }
    else
    {
      echo 'Просто текст';
    }
    Ответ написан
    Комментировать
  • Как снять такой куллер?

    @alexalexes
    621a12f4927d8863128704.jpeg
    1. Надавить вниз на оба крепления с одинаковым усилием, пока не ослабнет натяжение на проушинах.
    2. Отвернуть крепления так, чтобы освободить проушины, не ослабляя усилие 1.
    Ответ написан
    Комментировать
  • Как поправить mysql запрос?

    @alexalexes
    Классика жанра - подставить что-то в секцию запроса where из данных фильтра.
    Вы можете изменить запрос в зависимости от входных параметров, но есть один подводный камень.
    Вот так делать не надо:
    $sql = "select ...
    from ...
    where 1 = 1
    ".(isset($_POST['status']) ? ' and medialib.status LIKE '.$_POST['status'] // тут сшили текст запроса и значение параметра (эти два слова нужно подчеркнуть) 
     : "")

    Прямая подстановка дает возможность проводить sql инъекции.
    Правильно нужно примерно так:
    $bind_params = [];
    if(isset($_POST['status']))
      $bind_params['status'] = $_POST['status'];
    $sql = "select ...
    from ...
    where 1 = 1
    ".(isset($bind_params['status']) ? " and medialib.status LIKE :status " // тут сшили текст запроса со специальным маркером (может использоваться знак ? )
     : "")
    foreach($bind_params as $bind_param)
    {
      // тут привязываем каждое значение параметра с маркером в запросе через функцию bind_param (интерфейс и название функции зависит от библиотеки для соединения с базой данных)
    }
    Ответ написан
    Комментировать
  • Как используя такую конструкцию .* в sql можно дать название подстолбцам, которые будут выведены?

    @alexalexes
    И мне нужно использовать такую конструкцию:
    select food.* from table

    Странное требование, но можно обойти оборачиванием.
    select food.*
    from(select t.Milk as food_Milk, t.Oil as food_Oil
            from table as t) as food
    Ответ написан
  • Какой HDD объемом 2 Тб, выбрать?

    @alexalexes
    WD Purple любой. В комиссионном магазине можно найти и 4 Тбайт за такую цену, главное, посмотреть SMART.
    Ответ написан
  • Как удалить # из url, чтобы не мешал обновлению страницы?

    @alexalexes
    Добавьте "return false" чтобы предотвратить действие по умолчанию при клике на ссылку - переход по ссылке.
    onclick="window.location.reload(); return false;"
    Ответ написан
  • Как сделать цикличный цикл php?

    @alexalexes
    Положить меню в базу данных в виде структуры:
    MENU - таблица с анонсами меню
    menu_id - код анонса меню
    public_date - дата анонса

    DISH - таблица блюд (без привязки к меню)
    dish_id - id блюда
    title - название блюда
    dish_text - текст состава

    Таблица, обеспечивающая состав меню из блюд
    MENU_CONSIST
    cons_id
    menu_id
    dish_id
    position - порядок вывода

    Имея такую структуру, можно составить запрос на вывод меню на ближайшие 30 дней:
    select *
     from menu m
      join menu_consist mc on mc.menu_id = m.menu_id
      join dish d on d.dish_id = mc.dish_id
    where m.public_date >= CURDATE()
       and m.public_date <= CURDATE() + INTERVAL 30 DAY
    Ответ написан
    Комментировать
  • Как добавить один html файл в другой с помощью {{> }}?

    @alexalexes
    Перемотать видеоролик на начало или посмотреть предыдущий видеоролик и обратить внимание на инструментарий мужика. Что он использует еще помимо классики - CSS/HTML/JS.
    Ответ написан
    Комментировать
  • Как в MODX вывести данные в зависимости от полученного значения из сниппета?

    @alexalexes
    Голый чанковый синтаксис:
    [[*alias:is=`алиас_последнего_значения_uri,_но_не_факт,_что_не_будет_пересекаться_с_одноименными`:then=`вызов_чанка_блока_или_чистый_html`]]

    С использованием сниппета If (нужно установить одноименный пакет):
    [[!If?
      &subject=`[[*alias]]`
      &operator=`==`
      &operand=`алиас_последнего_значения_uri,_но_не_факт,_что_не_будет_пересекаться_с_одноименными`
      &then=`вызов_чанка_блока_или_чистый_html`
    ]]
    Ответ написан
    Комментировать
  • Как правильно создать таблицу в которой будет храниться инфо о посте?

    @alexalexes
    Если вы хотите просто считать сколько лайков и дизлайков поставили посту, то просто введите две новые колонки в таблице постов.
    Если хотите журналировать выставление лайков и дизлайков и потом заниматься аналитикой, сколько их выставили в час, день, неделю, месяц, то создайте отдельную таблицу для лайков:
    Таблица ЛАЙКИ
    id_лайка,
    id_поста,
    id_типа_лайка, -- лайк/дизлайк
    дата_время_выставления
    Но даже журналируя лайки, можно вести их учет количества в отдельных колонках поста - одно другому не мешает.
    Других оптимальных решений реляционная модель предложить не сможет для вашей задачи.
    Ответ написан
    Комментировать
  • Как сделать подстановку в json файл?

    @alexalexes
    Вычитать файл csv в ассоциативный массив вида:
    $city_dictionary[$en_name] = $ru_name;
    И произвести замену:
    //$data['response'][0]['cities'][0] - вы уверены, что по конечному нулевому индексу находится весь список, а не один город?
    foreach($data['response'][0]['cities'][0] as $city_key => $city)
    {
      if(array_key_exists($city, $city_dictionary))
       $data['response'][0]['cities'][0][$city_key] = $city_dictionary[$city];
    }

    После этого $data можно конвертнуть обратно в json и в нем будет заменено то, что было в словаре $city_dictionary.
    PS: Метод имеет ограничение. В текущем формате ассоциативного массива $city_dictionary нельзя разместить два равноправных варианта перевода. В случае наличия альтернативного варианта русского перевода, из csv будет извлечен в массив последний вариант.
    PS2: Ассоциативный массив словаря ограничен объемом выделенной оперативной памяти скрипта.
    Для более объемного словаря целесообразно делать выгрузку в базу данных и от туда использовать словарь, либо в memcache - архитектура технологии идеально подходит под условия вашей задачи. Но использовать и ту и другую нужно имея небольшой опыт.
    Ответ написан
  • Как исправить файл стиля xsl?

    @alexalexes
    Сложно сделать first- или last- специфичный выходной элемент, так как нельзя внятно получить значение position.
    Однако, можно воспользоваться таким костылем:
    1) Вывести запятую и перенос строки впереди очередного элемента VALUES, сохранив перенос после элемента.
    2) Закомментировать лишнюю запятую в запросе.
    То есть добиться такого вывода:
    INSERT INTO table (config, allowance, tablename) VALUES --,
    ('Station/Equip/Slot/Item[@key=''1'']/Supply/Item[@key=''Ph'']/Amperage', 3, 'float_actual')
    ,
    ('Station/Equip/Slot/Item[@key=''1'']/Supply/Item[@key=''Ph'']/Voltage', 3, 'number_actual')
    ,
    ('Station/Equip/Slot/Item[@key=''1'']/Supply/Item[@key=''Mc1'']/Amperage', 3, 'float_actual')
    ,
    ('Station/Equip/Slot/Item[@key=''1'']/Supply/Item[@key=''Mc1'']/Voltage', 3, 'number_actual')
    ,
    ('Station/Equip/Slot/Item[@key=''1'']/Supply/Item[@key=''Mc12'']/Amperage', 3, 'float_actual')
    ,
    ('Station/Equip/Slot/Item[@key=''1'']/Supply/Item[@key=''Mc12'']/Voltage', 3, 'number_actual')
    ,
    ('Station/Equip/Slot/Item[@key=''1'']/Supply/Item[@key=''Mc2'']/Amperage', 3, 'float_actual')
    ,
    ('Station/Equip/Slot/Item[@key=''1'']/Supply/Item[@key=''Mc2'']/Voltage', 3, 'number_actual')
    ,
    ('Station/Equip/Slot/Item[@key=''1'']/Supply/Item[@key=''An'']/Amperage', 3, 'float_actual')
    ,
    ('Station/Equip/Slot/Item[@key=''1'']/Supply/Item[@key=''An'']/Voltage', 3, 'number_actual')
    ;

    Правило:
    INSERT INTO table (config, allowance, tablename) VALUES --</xsl:text><xsl:apply-templates/>
        <xsl:text>;</xsl:text>
      </xsl:template>
      
      <xsl:template match="node()[@format]">
        <xsl:variable name="allowance" select="Allowance/@value"/>
       <xsl:text>,&#10;</xsl:text> <!-- Сюда добавлены запятая и перенос -->    
    <xsl:value-of select="concat('(', $apostrophe)"/>
        <xsl:for-each select="ancestor::*">
          <xsl:variable name="element" select="local-name()"/>
          <xsl:value-of select="$element"/>
          <xsl:if test="$element='Item'">
            <xsl:value-of select="concat('[@key=', $apostrophe, $apostrophe, @key, $apostrophe, $apostrophe, ']')"/>
          </xsl:if>
          <xsl:text>/</xsl:text>
        </xsl:for-each>
        <xsl:choose>
          <xsl:when test="starts-with(@format, 'N')">
            <xsl:value-of select="concat(local-name(), $apostrophe, ', ', $allowance, ', ', $apostrophe, 'number_actual', $apostrophe, ')')"/> <!--убран вывод последней запятой -->
          </xsl:when>
          <xsl:when test="starts-with(@format, 'F')">
            <xsl:value-of select="concat(local-name(), $apostrophe, ', ', $allowance, ', ', $apostrophe, 'float_actual', $apostrophe, ')')"/> <!--убран вывод последней запятой -->
          </xsl:when>
          <xsl:when test="starts-with(@format, 'D')">
            <xsl:value-of select="concat(local-name(), $apostrophe, ', ', $allowance, ', ', $apostrophe, 'decimal_actual', $apostrophe, ')')"/> <!--убран вывод последней запятой -->
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="concat(local-name(), $apostrophe, ', ', $allowance, ', ', $apostrophe, 'string_actual', $apostrophe, ')')"/> <!--убран вывод последней запятой -->
          </xsl:otherwise>
        </xsl:choose>
        <xsl:text>&#10;</xsl:text>
      </xsl:template>
      <xsl:template match="text()"/>
    </xsl:stylesheet>
    Ответ написан
    Комментировать
  • Почему при возведении -1000 в 1/3 степень получается Nan?

    @alexalexes
    Выражение:
    $result = -1000 ** (1 / 3);
    выполняется с таким приоритетом:
    $result = -(1000 ** (1 / 3));
    Поэтому тут нет NAN.
    Ответ написан
    Комментировать
  • Как правильно вывести массив из бд и перебрать его?

    @alexalexes
    На этом фрагменте строки:
    => '{type' =>
    у вас должно закрасться подозрение, что нужно собирать вложенный объект как-то по другому, а именно:
    $taskList[] = array( // старый способ объявления массива, можно [, но не суть
    'type' => 'Feature', 
    'id' => $row->id, 
    'geometry' => // в json-е встретилась фигурная скобка (свойство-объект) - повторяю ее открытие в своей конструкции 
    [ // это хоть и объявление массива, но в определенном режиме в JSON конвертнется в объект, так как имена свойств ассоциативные
      'type' => 'Point', 
      'coordinates' =>
        [ // а тут массив останется массивом, так как о ключах ни слова (они по индексу)
        $row->coordinates,
        $row->coordinates2
        ] // конец свойства coordinates
    ] // конец свойства geometry
    
    );
    Ответ написан
    1 комментарий
  • Какая разница между генераторами и массивами?

    @alexalexes
    https://www.php.net/manual/ru/language.generators....
    foreach (xrange(1, 9, 2) as $number) {
        echo "$number ";
    }

    Если рассказать простым языком магии, то при таком вызове внутри foreach, функция xrange определяет, что ее результат не собираются записывать в отдельную переменную, а собираются перебирать по элементам.
    Поэтому, когда выполнение интерпретатора php доходит до команды as, функция xrange выполняется до первого попавшегося yield внутри этой функции и возвращает это значение. При этом, контекст функции запоминается, а также внутренний цикл:
    for ($i = $start; $i <= $limit; $i += $step) {
                yield $i;
    }

    засыпает до того момента, пока во внешнем foreach выполнение не пройдет команду as еще раз, тогда произойдет размораживание yield и извлечение следующего значения, чтобы использовать его только как один элемент $number.
    За счет того, что as меняет режим работы вызова функции xrange, получается не извлекать все подряд.
    Ответ написан
    Комментировать
  • Как удалить элемент массива в localstorage, по нажатию на крестик, и перезаписать массив?

    @alexalexes
    Нужно использовать обертку+замыкание для обработчика, удаляющего элемент по клику.
    tasks.push(data); // тут вставили очередной элемент
    let task_index = tasks.length - 1; // узнаем его индекс по длине массива, так как он в текущей ситуации последний
    // несколько строк спустя
    b1.addEventListener("click", 
    (function(inner_task_index) // функция-обертка для изоляции контекста, сюда передается значение task_index, я специально выделил его другим именем inner_task_index, чтобы видеть контекст функции-обертки
      {
    // обертка возвращает функцию-обработчик события  для addEventListener
    return function delFromLocalSt() {
        task.removeChild(li);
            let array = JSON.parse(localStorage.getItem('task'));
            array.splice(inner_task_index, 1); // удаляем элемент по известному индексу используя механизм замыкания, используя контекст функции обертки
        localStorage.setItem('task', JSON.stringify(array));
       }
    })(task_index) // вызываем хитрую обертку, чтобы обеспечить изоляцию переменной от контекста функции createEl
    );
    Ответ написан
    1 комментарий
  • Зачем нужен multitouch на 10 касаний?

    @alexalexes
    Тоже искал на этот вопрос ответ. Из всего вороха статей и видеороликов можно сделать вывод.
    1. Для 99% задач хватит поддержки 2-3 одновременных касаний сенсора.
    2. Сенсор, который поддерживает 2 одновременных касания имеет технические ограничения, не позволяющие определять 2 касания в точках, расположенных на одной оси. В связи с этим нужно использовать сенсор с не менее 5 одновременных касаний. В нем не сэкономили на технологии изготовления, и регистрация 2-3 касаний гарантирована в любых точках.
    3. Теоретически, в сенсор на 10 касаний могли заложить более высокое разрешение в плане детализации точек касания (как бонус не экономии на технологии), что позволило бы точно захватывать более мелкие детали интерфейса. Но этот тезис нужно подтверждать либо техническими характеристиками, либо экспериментально.
    Ответ написан
    Комментировать