За последние 24 часа нас посетили 35300 программистов и 1742 робота. Сейчас ищут 1092 программиста ...

оптимизация селектов

Тема в разделе "PHP для новичков", создана пользователем dslychko, 16 сен 2008.

  1. dslychko

    dslychko Активный пользователь

    С нами с:
    14 июн 2007
    Сообщения:
    144
    Симпатии:
    0
    В скрипте приходится формировать 10 селектов с выборкой данных из таблицы. Записей в таблице больше 1000.
    Делаю так.

    PHP:
    1. // Формирую все селекты
    2. $sql2 = mysql_query("SELECT name FROM $table3 ORDER BY name  " ,$db);
    3.  $select1 = '<select name="f1" ><option selected></option>';          
    4.  $select2 = '<select name="f2" ><option selected></option>';          
    5.  $select3 = '<select name="f3" ><option selected></option>';          
    6.  $select4 = '<select name="f4" ><option selected></option>';          
    7.  $select5 = '<select name="f5" ><option selected></option>';        
    8.  $select6 = '<select name="f6" ><option selected></option>';        
    9.  $select7 = '<select name="f7" ><option selected></option>';        
    10.  $select8 = '<select name="f8" ><option selected></option>';        
    11.  $select9 = '<select name="f9" ><option selected></option>';        
    12.  $select10 = '<select name="f10" ><option selected></option>';        
    13.  $select = '';
    14.  while($product = mysql_fetch_array($sql2))
    15.      $select .= '<option value='.$product['name'].'>'.$product['name'].'</option>';
    16.  $select1 .= $select.'</select>';
    17.  $select2 .= $select.'</select>';
    18.  $select3 .= $select.'</select>';
    19.  $select4 .= $select.'</select>';
    20.  $select5 .= $select.'</select>';
    21.  $select6 .= $select.'</select>';
    22.  $select7 .= $select.'</select>';
    23.  $select8 .= $select.'</select>';
    24.  $select9 .= $select.'</select>';
    25.  $select10 .= $select.'</select>';
    26.  
    27. // Вывожу селекты
    28.  echo("
    29.        <td><div style=\"width:90px; overflow:hidden;\">".$select1."</div></td>
    30.        <td><div style=\"width:90px; overflow:hidden;\">".$select2."</div></td>
    31.        <td><div style=\"width:90px; overflow:hidden;\">".$select3."</div></td>
    32.        <td><div style=\"width:90px; overflow:hidden;\">".$select4."</div></td>
    33.        <td><div style=\"width:90px; overflow:hidden;\">".$select5."</div></td>
    34.        <td><div style=\"width:90px; overflow:hidden;\">".$select6."</div></td>
    35.        <td><div style=\"width:90px; overflow:hidden;\">".$select7."</div></td>
    36.        <td><div style=\"width:90px; overflow:hidden;\">".$select8."</div></td>
    37.        <td><div style=\"width:90px; overflow:hidden;\">".$select9."</div></td>
    38.        <td><div style=\"width:90px; overflow:hidden;\">".$select10."</div></td>
    39. ");
    40.  
    Происходит всё крайне долго. Иногда попытка вылетает с ошибкой Fatal error: Maximum execution time of 30 seconds exceeded in ...

    Как то можно это оптимизировать ? Повторюсь, записей в таблице больше 1000.
     
  2. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    варианты такие:
    - апдэйтить железо
    - оптимизить систему/apache/mysql/php настройками
    - увеличить время выполнения скрипта :D

    из более гуманного:
    - генерить не автоматически, кэшировать (если возможно конечно)
    - грамотная индексация базы под запрос
    - LIMIT может быть (если знаешь максимальное количество возможно-отдоваемого)
    - mysql_fetch_row вместо _array (слышал, что работает несколько быстрее, хотя вряд ли поможет, мелочь точно)

    ----------

    странно на самом деле, что дохнет. не миллион записей же. на какой строке происходит смерть скрипта? что в скрипте до этого и что после этого?
     
  3. Anonymous

    Anonymous Guest

    так ты эту мелочь множ на тысячу строк...
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    да быть не может чтобы вот этот конкретный скрипт выполнялся дольше 30 сек ...
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Да хоть десять тысяч. Определи для начала, на что конкретно не хватает времени.
     
  6. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    Какой мудак станет читать все 1000 вариантов выбора, дабы выбрать правильный вариант? :)
    Во вторых, т.к. во всех селектах все варианты выбора одинаковые, почему бы не сделать мульти селект? - в 10 раз меньше объём сразу будет...