1. PHP / Говнокод #2875

    +162.4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    while( $db->next_record() ) {
    				$parent_id = $db->f( "product_parent_id" ) ;
    				if( ($db->f( "product_id" ) != $curr_product) && @$child_id ) {
    					continue ;
    				}
    				// Start row for this child
    				$q = "SELECT product_id, attribute_name FROM #__{vm}_product_attribute_sku " ;
    				$q .= "WHERE product_id='" . $db->f( "product_parent_id" ) . "' ORDER BY attribute_list ASC" ;
    				$db_sku->query( $q ) ;
    				$attrib_value = array( ) ;
    				
    				while( $db_sku->next_record() ) {
    					$q = "SELECT attribute_name,attribute_value " ;
    					$q .= "FROM #__{vm}_product_attribute WHERE " ;
    					$q .= "product_id='" . $db->f( "product_id" ) . "' AND " ;
    					$q .= "attribute_name='" . $db_sku->f( "attribute_name" ) . "'" ;
    					$db_item->setQuery( $q ) ;
    					$db_item->query() ;
    					while( $db_item->next_record() ) {
    						if( $ci == 0 ) {
    							$attrib_heading[] = $db_item->f( "attribute_name" ) ;
    							$tpl->set( 'headings', $attrib_heading ) ;
    						}
    						$attrib_value[] = $db_item->f( "attribute_value" ) ;
    					}
    				}

    Не знаю выкладывал ли кто, но захотелось покрыть все матом :(((

    Джумла + вирт. март.
    Выше этого лежит ещё два цикла. С помощью данного участка кода и выше, который я опустил ибо в него долго въезжать, т.к. слишком много букофф - разгоняет нагрузку на бд до 800 запрос ради вывода десяти товаров.

    Запостил: matrix, 27 Марта 2010

    Комментарии (8) RSS

    • По долгу службы просят оптимизировать :)))
      Ответить
    • Ненавижу такие вот тупые обвертки над БД.
      Ответить
      • Да обертки это ещё пол беды. А вот то, что запросы к бд в циклах и на туче разных айдишниках, что вследствие ведет к повисшим коннектам и нехватки памяти.....
        Ответить
        • $tpl->set(...)
          походу в шаблон добавляется только результат внутреннего цикла... если подумать, то можно как-то всё в один запрос загнать
          Ответить
          • не-а

            Ниже идет типа fetch шаблона, который записывается в массив и затем вся выборка собирается в другой шаблон.

            Типа $products[$i] = $tpl->fetch(..)

            А потом в конце всех циклов будет

            $tpl->set('products', $products);

            Где в шаблонах $products будет обходится через foreach (...) и выводить табличку :))))

            Отчасти решилось путем сборки айдишников и запросов к бд через WHERE ... IN ...
            И отказа от дублирующих проверок.

            В общем из 800 запросов удалось сделать 118
            Ответить
            • А можно ли где-нибудь увидеть результат? А то ковыряться в тысячах файлов вирта и джумлы как-то ломает.
              Ответить
            • Вот блин, дублирование комментариев — это уже вина этого сайта. Я один раз нажал Ctrl-Enter.
              Ответить
    • Честно, понятия не имею. Все-таки три месяца прошло. Думаю можно запустить серч по файлам и отыскать этот кусок не составит труда, т.к. исходник выложен.
      Ответить

    Добавить комментарий