Задать вопрос
  • Как подсчитать количество строк в sql запросе?

    @alexalexes
    10.3.36-MariaDB
    объясняю раскладывая все по буквам.
    есть товар, который имеет несколько атрибутов, для примера возьмем 5 шт., они лежат все в одной таблице и имеют разные attribute_id, в запрос приходят 3 параметра, к примеру 200, 80, 15, пример записи в таблице
    spoiler
    product_id attribute_id text
    1 10 200
    2 10 230
    3 10 200
    1 12 80
    2 12 80
    3 12 80
    1 15 15
    2 15 13
    3 15 15
    1 80 Сони
    2 80 Сони
    3 80 Сони
    1 90 66
    2 90 60
    3 90 71

    по запросу нужно получить значение атрибута с attribute_id = 80 и с теми значениями которые еще пришли
    то есть результат должен быть Сони и total = 2 так как всем условиям соответствует 2 товара, то есть товары с product_id 1 и 3

    Вообще, в вашей задаче первым делом нужно правильно избавиться от distinct, чтобы правильно трактовать выбранные записи.
    Как это сделать?
    Считаем, что товарные item-ы имеют атрибут с id = 80 - по ним проходимся как по товарным записям. Все остальные id атрибутов используем как свойства записей - 10 - ширина, 12 - высота, 15 - диагональ.
    Тогда запрос будет таким:
    -- Тестовая выборка
    with product_attribute as (select 1 product_id, 10 attribute_id, '200' text from dual union all
    select 2, 10, '230' from dual union all
    select 3, 10, '200' from dual union all
    select 1, 12, '80' from dual union all
    select 2, 12, '80' from dual union all
    select 3, 12, '80' from dual union all
    select 1, 15, '15' from dual union all
    select 2, 15, '13' from dual union all
    select 3, 15, '15' from dual union all
    select 1, 80, 'Сони' from dual union all
    select 2, 80, 'Сони' from dual union all
    select 3, 80, 'Сони' from dual union all
    select 1, 90, '66' from dual union all
    select 2, 90, '60' from dual union all
    select 3, 90, '71' from dual),
    product as (select 1 product_id from dual union all
    select 2 from dual union all
    select 3 from dual
    )
    
    -- Сам запрос поиска
    Select A.*,
           count(*) over () cnt -- количество товаров в результате поиска
    from (SELECT p.product_id,
                 -- далее, его свойства
                 (select pp.text from product_attribute pp where p.product_id = pp.product_id and pp.attribute_id = 80) product_name, -- наименование item-а
                 (select pp.text from product_attribute pp where p.product_id = pp.product_id and pp.attribute_id = 10) wdt,
                 (select pp.text from product_attribute pp where p.product_id = pp.product_id and pp.attribute_id = 12) hgt,
                 (select pp.text from product_attribute pp where p.product_id = pp.product_id and pp.attribute_id = 15) dia
            FROM product p
          ) A
    where 1 = 1
      -- тут пишем поисковой довесок условий
      and A.wdt = 200
      and A.hgt = 80
      and A.dia = 15

    Результат будет:
    product_id product_name wdt hgt dia cnt
    1	Сони	200	80	15 	2
    3	Сони	200	80	15	2

    2 строки, считайте их как угодно, например, через count(*) over ().
    Ответ написан
    4 комментария
  • Как скрыть форму на js?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Как сделать что бы по умолчанию, форма была скрыта?

    Прописать ей изначально стили, чтобы она была скрыта.
    Ответ написан
    1 комментарий
  • Как вытащить значение из массива?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    $array = [...];
    $del_val = '137';
    
    // В современном PHP
    $data = array_filter($array, fn (array $item): bool => $item['tariff_id'] == $del_val);
    
    // Если у вас старая версия
    $data = array_filter($array, function (array $item) use ($del_val): bool {
        return $item['tariff_id'] == $del_val;
    });
    
    $item = end($data);
    echo $item['mode_id'];
    
    // Но можно и вашу версию доработать
    $data = null;
    foreach ($array as $arr) {
        if ($arr['tariff_id'] == $del_val) {
            $data = $arr;
        }
    }
    
    echo $data ? $data['mode_id'] : 'not found';
    Ответ написан
    6 комментариев
  • Не работает js на jquery-3.7.0?

    NikFaraday
    @NikFaraday
    Student full-stack Developer
    В вашем коде вы используете неправильные имена обработчиков для успеха и ошибки ajax-запроса. Вместо done и fail используйте success и error, соответственно.

    UPD:
    Вот стандартный пример ajax-запроса:
    $.ajax({
        url: 'https://domain.com/router/',
        method: 'post', // NOT A TYPE
        data: JSON.stringify({ ... }),
        dataType: 'application/json; charset=utf-8',
        success: (response) => { ... },
        error: (response) => { ... }
    })


    .done и .fail срабатываю, когда у вас получилось либо не получилось сделать запрос. success и error срабатывают в зависимости от ответа сервера.
    Ответ написан
    2 комментария
  • Как сделать поиск по картинке?

    sanchezzzhak
    @sanchezzzhak
    Ля ля ля...
    Вообще это называется https://en.m.wikipedia.org/wiki/Cross-correlation
    Думаю подойдёт
    https://github.com/sapientpro/image-comparator

    Обратите на метод hashImage результат этой функции нужно сохранить в БД.
    Лучше всего чекать всегда один размер, то есть файл который загружают уменьшать до приемлемого размера, получать хэш и сравнивать с базой
    Также загружаемый файл чекать на ориентацию (перевёрнуто ли картинка) и исправлять в exif эта информация есть.
    Ответ написан
    Комментировать
  • Как вытащить строку из текста?

    vhood
    @vhood
    Не забывайте отмечать решения
    $str = '
    текст текст текст текст текст
    <tr><td>Габариты заводской упаковки (длина, ширина, высота): <b>35 x 16 x 9</b> см. </td></tr>
    <tr><td>Габариты упаковочной коробки (длина, ширина, высота): <b>40 x 21 x 14</b> см. </td></tr>
    текст текст текст текст текст
    ';
    
    preg_match('/Габариты упаковочной коробки.*<b>(.*)<\/b>/', $str, $matches);
    
    $value = array_key_exists(1, $matches) ? $matches[1] : null;
    
    var_dump($value);
    
    // 40 x 21 x 14
    Ответ написан
    1 комментарий
  • Как решить проблему по перезаписыванию resolv.conf?

    ValdikSS
    @ValdikSS
    1. Ищем официальную документацию на CentOS 7. Находим.
    2. Ссылки на смену DNS нет, но есть ссылки на документацию RedHat 7. Переходим.
    3. Открываем раздел Configuring and managing networking > Chapter 33. .... Бинго!


    Смотрите, как просто!
    Ответ написан
    1 комментарий
  • Как отсортировать массив?

    @Akina
    Сетевой и системный админ, SQL-программист.
    SELECT name, `text`
    FROM product
    JOIN product_attribute USING (product_id)
    JOIN attribute_description USING (attribute_id)
    -- JOIN attribute USING (attribute_id)   -- таблица в запросе не нужна
    GROUP BY 1, 2
    HAVING COUNT(*) > 1;

    fiddle

    Если нужна именно сортировка как в эталоне - ну добавить ORDER BY MAX(attribute_id)

    Таблица attribute потребуется лишь в случае, если данные из неё нужны (например, в запрос добавится отбор по значению attribute_group_id).

    Если надо сравнивать атрибуты у более чем 2 товаров, то соотв. образом откорректировать условие пост-отбора. Например, для 3 товаров и атрибутов, имеющихся у всех трёх, это будет HAVING COUNT(*) = 3
    Ответ написан
  • Как сформировать запрос к БД?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Для MySQL 8.0 и выше
    WITH `cte` (`id`, `row`) AS (
       SELECT `id`, ROW_NUMBER() OVER `win`
         FROM `product`
         WINDOW `win` AS (PARTITION BY `sku` ORDER BY `quantity` = 0, `price`)
     )
     UPDATE `cte`
       JOIN `product` USING (`id`)
       SET `product`.`status` = (`cte`.`row` = 1)

    Для старых версий MySQL
    UPDATE `product` AS `p` 
      LEFT JOIN (
        SELECT `t`.`sku`, MIN(`p`.`id`) AS `id`
          FROM (
            SELECT `sku`, MIN(`price`) AS `price`
              FROM `product`
              WHERE `quantity` != 0
              GROUP BY `sku`
          ) AS `t`
          JOIN `product` AS `p`
            ON `p`.`sku` = `t`.`sku` AND `p`.`price` = `t`.`price`
          WHERE `p`.`quantity` != 0
          GROUP BY `t`.`sku`
      ) AS `i` ON `i`.`id` = `p`.`id`
      SET `p`.`status` = (`i`.`id` IS NOT NULL);
    Ответ написан
    4 комментария