Нужно строить select'ы, выбирая данные из бд. Код (Text): $sql = mysql_query("SELECT * FROM $table ORDER BY name " ,$db); echo "<select name=s1 >"; while($product = mysql_fetch_array($sql)) { echo"<option value=$product[name]> $product[name]</option>"; } echo"</select>"; $sql = mysql_query("SELECT * FROM $table ORDER BY name " ,$db); echo "<select name=s2 >"; while($product = mysql_fetch_array($sql)) { echo"<option value=$product[name]> $product[name]</option>"; } echo"</select>"; Данных много, select'ов тоже. Загрузка происходит медленно. Как мне упростить конструкцию ?
жесть. а зачем делать Select *, если вы используете только $product[name]?. Думаю ограничение выборки уже снизит нагрузку в несколько раз. можно выбрать все требуемые данные джоином в одну таблицу, и уже во всех ваших селектах проходить по этой таблице, но это уже имхо изврат. хотя можете попробовать.
[sql]SELECT name FROM $table ORDER BY name[/sql] а что, из одной таблицы 2 раза выбирается одно и тоже? Или где-то ещё пропущен кусок где $table принимает другое значение?
Luge, Выбирается одно и то же, а селектов много с одинаковыми данными. creage, новичёк. Что поделаешь... Я думал формировать массив (SELECT name FROM $table ORDER BY name) и формировать селекты массивом. Но не знаю правильно ли это. Снизит ли это нугрузку.
PHP: <?php $sql = mysql_query('SELECT `name` FROM `'.$table.'` ORDER BY `name`' ,$db); $select1 = '<select name="s1" >'; $select2 = '<select name="s2" >'; $select = ''; while($product = mysql_fetch_array($sql)) $select .= '<option value='.$product['name'].'>'.$product['name'].'</option>'; $select1 .= $select.'</select>'; $select2 .= $select.'</select>'; // первый селект echo $select1; // ну и где-то второй echo $select2; ?> ну или вместо переменных можно в массив загонять
Нисколько не критикую метод Luge, хотя я бы предложил что-то типа такого: PHP: <?php function select_get_data($table) { static $prod = array(); if ( !isset($prod[$table]) ) { $sql = mysql_query('SELECT `name` FROM `'.$table.'` ORDER BY `name`'; while($product = mysql_fetch_array($sql)) { $prod[$table][] = $product; } } return $prod[$table]; } function select_draw($table, $name) { $data = select_get_data($table); echo "<select name='$name'>"; foreach ($data as $product) { echo "<option value='". $product['name'] ."'>" . $product['name'] . "</option>"; } echo "</select>"; } // select_draw('user_table', 'user_form_name1'); // select_draw('user_table', 'user_form_name2'); ?>
в смысле PHP: <?php $selected = 'какой-то иам продукт'; while($product = mysql_fetch_array($sql)) $select .= '<option value='.$product['name'].' '.(($product['name']==$selected)?'selected':'').'>'.$product['name'].'</option>'; ?> ?
Я всегда загоняю необходимые СЕЛЕКТу данные в массив, а затем испольлзую такой класс : PHP: <?php //Класс работы с select class select { protected $name; // имя select-a (списка или комбобокса) protected $options; // асоциативный массив "значение=>текст" protected $value; // значение select-a (списка или комбобокса), может быть массивом protected $attributes; // доп. атрибуты тега protected $disabled; //Метка в конце имени опции, указывающая на её недоступность protected $show_all; //Если true -- ингорирует метки недоступности и вычистит их protected $ignore; //Метка в конце имени опции, указывающая, что эту опцию показывать не надо function __construct($name,$options,$value=NULL,$attributes="",$disabled="%%%",$show_all=false,$ignore="@@@") { $this->name=$name; $this->options=$options; $this->value=$value; if (!is_array($this->value)) settype($this->value,"string"); $this->attributes=$attributes; $this->disabled=$disabled; $this->show_all=$show_all; $this->ignore=$ignore; } //--------------------------------- function html() { $select="\n<select name=\"".$this->name."\" ".$this->attributes.">"; $options=""; $len_ignore=strlen($this->ignore); $len_disabled=strlen($this->disabled); foreach ($this->options as $value=>$text) { if (substr($text,strlen($text)-$len_ignore,$len_ignore)==$this->ignore) { continue; } $options.="\n<option value=\"$value\""; if (is_array($this->value)) //Для списка с Multiple { if (array_key_exists ( $value, $this->value )) $options.=" selected=\"selected\""; } else //Т.е. значение -- "скалярная" велоичина (не массив) { settype($value,"string"); if ($value==$this->value) { $options.=" selected=\"selected\""; } } if (substr($text,strlen($text)-$len_disabled,$len_disabled)==$this->disabled) { if ($this->show_all==false) { $options.=" disabled=\"disabled\""; } $text1=substr($text,0,strlen($text)-$len_disabled); } else $text1=$text; $options.=">$text1</option>"; } $select.=$options."\n</select>\n"; return $select; } //--------------------------------- }//end class ?>