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

    +159.7

    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
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    $q = "SELECT product_id FROM jos_vm_product WHERE product_parent_id=$prodid";
        $res = mysql_query($q);
        if(!$res) die('Error 3: ' . mysql_error());
        
        $td_str=' ';
        $pos_atrribs=array();
        $row=0;
        $sort_by=0;
        $subrows=0;
        $show_cells=0;
        
        while($pos=mysql_fetch_array($res))
        {
          $posid=$pos['product_id'];
          $q1 = "SELECT attribute_value,attribute_name  FROM jos_vm_product_attribute WHERE product_id=$posid ORDER BY attribute_name DESC";
          $res1 = mysql_query($q1);
          if(!$res1) die('Error 4: ' . mysql_error());
          
          $col=0;
          while($posattrib=mysql_fetch_array($res1))
          {
            if($posattrib['attribute_name']=='Код фитинга' || $posattrib['attribute_name']=='Код' || $posattrib['attribute_name']=='Кодфитинга' || $posattrib['attribute_name']=='Ordering code')
            {
              $sort_by=$posattrib['attribute_name'];
            }
            $pos_atrribs[$row][$posattrib['attribute_name']]=$posattrib['attribute_value'];
            $col++;
          }
          
          $q1 = "SELECT product_in_stock FROM jos_vm_product WHERE product_id=$posid";
          $res1 = mysql_query($q1);
          if(!$res1) die('Error 4: ' . mysql_error());
          $stock=mysql_fetch_array($res1);
          
          $pos_atrribs[$row]['Склад']=$stock['product_in_stock'];
          
          $q1 = "SELECT product_price FROM jos_vm_product_price WHERE product_id=$posid";
          $res1 = mysql_query($q1);
          if(!$res1) die('Error 4: ' . mysql_error());
          $price=mysql_fetch_array($res1);
          
          $pos_atrribs[$row]['Цена EUR']=$price['product_price'];
          $pos_atrribs[$row]['posid']=$posid;
          $row++;
        }
    
    function columnSort($sorted, $column) {
            for ($i=0; $i < sizeof($sorted)-1; $i++) 
            {
              for ($j=0; $j<sizeof($sorted)-1-$i; $j++)
                if ($sorted[$j][$column] > $sorted[$j+1][$column]) 
                {
                  $tmp = $sorted[$j];
                  $sorted[$j] = $sorted[$j+1];
                  $sorted[$j+1] = $tmp;
              }
            }
            return $sorted;
        }    
        $sorted = columnSort($pos_atrribs, $sort_by);
        unset($pos_atrribs);
        
        $new_attribs=array();
        $num=0;
        $matches=0;
        for ($i=0; $i < sizeof($sorted); $i++) 
        {
          if(substr($sorted[$i][$sort_by],-2)!='.1' && substr($sorted[$i][$sort_by],-2)!='.4')
          {
            $fs=(int)substr($sorted[$i][$sort_by],0,3);
            $fe=(int)substr($sorted[$i][$sort_by],-3);
            
            for ($j=0; $j<sizeof($sorted); $j++)
            { 
              $ss=(int)substr($sorted[$j][$sort_by],0,3);
              $se=(int)substr($sorted[$j][$sort_by],-3);
              
              if ($fe==$se && $fs<$ss) 
              {
                $new_attribs[$num]=array($sorted[$i],$sorted[$j]);
                $num++;
                $matches++;
              }
            }
          }
        }

    Джомло проект, в ходе запросов(11-46 строки) получает 250+ запросов к БД, и время выполнения только этого куска 40+ секунд. Далее сортировка тоже не слабая.

    Запостил: kein, 11 Марта 2010

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

    • Какой-то костыль к VirtueMart? Или это сам VirtueMart?
      Ответить
    • Все читать не стал, но у меня складывается впечатление, что человек просто не знает что такое join.
      Ответить
      • К черту джоин)) Я собрал все в два запроса с where) Иначе с одним лишний перерасход ресурсов получается. Как бы то нибыло оказалось еще проблема в проектировке базы, таблица содержит 14000+ кортежей, причем один из атрибутов типа текст, и этот атрибут имеет от силы 20-30 разных значений, остальное дубликаты
        Ответить
    • Где здесь Джумла?
      Ответить
      • ты её не видишь, но она есть )))
        (алсо aka где здес С++? )
        Ответить

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