Ответы пользователя по тегу MySQL
  • Обработка большого числа $_POST

    dxArtem
    @dxArtem
    Появилась очень классная функция.

    www.php.net/manual/en/function.filter-input-array.php

    /* data actually came from POST
    $_POST = array(
        'product_id'    => 'libgd<script>',
        'component'     => '10',
        'versions'      => '2.0.33',
        'testscalar'    => array('2', '23', '10', '12'),
        'testarray'     => '2',
    );
    */
    
    $args = array(
        'product_id'   => FILTER_SANITIZE_ENCODED,
        'component'    => array('filter'    => FILTER_VALIDATE_INT,
                                'flags'     => FILTER_REQUIRE_ARRAY, 
                                'options'   => array('min_range' => 1, 'max_range' => 10)
                               ),
        'versions'     => FILTER_SANITIZE_ENCODED,
        'doesnotexist' => FILTER_VALIDATE_INT,
        'testscalar'   => array(
                                'filter' => FILTER_VALIDATE_INT,
                                'flags'  => FILTER_REQUIRE_SCALAR,
                               ),
        'testarray'    => array(
                                'filter' => FILTER_VALIDATE_INT,
                                'flags'  => FILTER_REQUIRE_ARRAY,
                               )
    
    );
    
    $myinputs = filter_input_array(INPUT_POST, $args);
    
    Ответ написан
    Комментировать
  • Тормозит mysql запрос

    dxArtem
    @dxArtem
    Я так понимаю под запрос сделан, чтоб вытащить первую фотку? Дело в том что ORDER BY всегда делает tmp таблицы для сортировки, хотя в EXPLAIN я в данном случае не вижу.

    Попробуйте так:
    SELECT 
      p.`id`,
      p.`name`,
      p.`category_id`,
      v.`name` AS vendor,
      p.`price_ya`,
      pp.`value` AS price,
      pp.`fix_currency_id`,
      ph.`id` AS photo,
      px.`status` 
    FROM
      `products_prices` AS pp,
      `xml_products` AS px,
      `products` AS p 
      LEFT JOIN `vendors` AS v 
        ON p.`vendor_id` = v.`id` 
      LEFT JOIN `products_photos` ph
        ON ph.`product_id` = p.`id`
    WHERE pp.`price_id` = '2' 
      AND p.`id` = pp.`product_id` 
      AND p.`id` = px.`product_id` 
      AND px.`site_id` = '2' 
    GROUP BY p.`id`
    

    Тут GROUP By сгрупирует, а в left join выйдет первый id, если не ошибаюсь. Сложно без базы анализировать.

    Еще нужно учитывать версии mysql, в каждой версии используются по разному индексы, который я кстати вообще не вижу, везде using where.
    Ответ написан