Решил тут с кодом поиграться и наткнулся на непонятку. Делаю примерно так: PHP: <?php $result = mysql_query("SELECT `category_id`, `category_type`, `category_name` FROM `table` ORDER BY `category_position` DESC"); $category_types = array(1 => 'Это раз', 2 => 'Это два', 3 => 'Это три'); foreach($category_types as $index => $value) { $imp[] = '<option style="font-weight:bold;">• '.$value.'</option>'; while($row = mysql_fetch_assoc($result)) { if($row['category_type'] == $index) { $imp[] = '<option value="'.$row['category_id'].'"> - '.htmlspecialchars($row['category_name']).'</option>'; } } } $imp = implode('', $imp); И получаю список категорий только в 'Это раз'. Не понимаю, как будто в следующих двух итерациях форича цикл while не проходит или в $result уже ничего нет. И это доказывается, делая echo $row['category_type'] в теле цикла while. Должны отобразиться типы всех категорий по три раза, а выводится только один раз. Где меня глючит? p.s. Такие конструкции - это жесть. ИМХО не должно быть вайла в фориче, должно быть наоборот. Это я просто играюсь так.
В конце while поставь: PHP: mysql_data_seek($result, 0); Возврат указателя на нулевой индекс в результате запроса. Хотя нет, я поторопился. Это зациклит скрипт. Но факт в том, что после использования mysql_fetch_assoc($result) индекс чтения результата смещается в конец. Сейчас думаю как лучше это сделать.
я чет не понимаю это прикол что ли? переменно $result в самом начале присваивается значение в первом же while мы выбираем все данные и дальше нам mysql_fetch_assoc($result) возвращает false...
Не, просто надо кофе поменьше пить и спать побольше =) Да я ещё 10 минут назад допёр до этого решения =) Просто тему не трогал 8)