"PHP" / Говнокод #2756 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 kein, (Updated )

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

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

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8