Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2013, 13:11   #1
yaskin
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 112
Вопрос Вывести массив данных

Есть база данных
PHP код:
cate_idcate_namegoods_idgoods_name
42  Категория1  150  Товар1
42  Категория1  151  Товар2
42  Категория1  152  Товар3
43  Категория2  153  Товар4
43  Категория2  154  Товар5
44  Категория3  155  Товар6
44  Категория3  156  Товар7 
Есть функция, возвращающая двумерный массив данных
PHP код:
    function get_cate()
    {
        static 
$data = array();    // Выходной Массив 
            
$sql "SELECT 
              cate_id, cate_name, goods_id, goods_name
            FROM 
              goods;

            
$result = $this->db->query($sql);
            
$row = mysql_fetch_array ($result, MYSQL_NUM); // получаем первую строку
                    while (
$row) // Пока есть записи
                    {
                        
$data[$row['cate_id']] = array(
                        'cate_id' => 
$row['cate_id'],                        
                        'cate_name' => 
$row['cate_name'],
                        'goods_id'     => 
$row['goods_id'],
                        'goods_name' => 
$row['goods_name']                        
                        );
                    
$row = mysql_fetch_array ($result); // получаем следующую строку
                    }                
        return 
$data
и вывод на smarty
PHP код:
<!--{foreach item=tovar from=$cates key=k}-->
{
$k} : {$tovar.cate_id}<br>

<!--{if 
$tovar.cate_id eq $k}-->

    <!--{foreach 
key=key item=item from=$tovar }-->    
        {
$key} : {$item}<br>
    <!--{/foreach}-->
    
<!--{/if}-->
    
    <
br>
<!--{
foreachelse}-->
    
Ничего не найдено    
<!--{/foreach}--> 
выводит данные в таком виде:
PHP код:
42  Категория1  150  Товар1
43  Категория2  153  Товар4
44  Категория3  155  Товар6 
а надо так
PHP код:
42  Категория1  
  150  Товар1
  151  Товар2
  152  Товар3
43  Категория2  
  153  Товар4
  154  Товар5
44  Категория3  
  155  Товар6
  156  Товар7 
Помогите с кодом, а то уже глаз замылился
Для спасибо весы слева
yaskin вне форума Ответить с цитированием
Старый 16.03.2013, 13:54   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

а где ваш код то?
ADSoft вне форума Ответить с цитированием
Старый 16.03.2013, 13:57   #3
yaskin
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 112
По умолчанию

я про smarty код говорю
Для спасибо весы слева
yaskin вне форума Ответить с цитированием
Старый 16.03.2013, 17:57   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

имхо - смарти не позволяет такого делать
ADSoft вне форума Ответить с цитированием
Старый 16.03.2013, 18:17   #5
kuba1981
Форумчанин
 
Регистрация: 22.08.2012
Сообщений: 155
По умолчанию

Попробуйте запрос поменять,
Код:
SELECT  a, b FROM  A LEFT OUTER JOIN B ON a=b
Вернет записи таблицы a и все соответствующин ей записи таблицы b
kuba1981 вне форума Ответить с цитированием
Старый 16.03.2013, 22:19   #6
yaskin
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 112
По умолчанию

Причем здесь запрос? Массив нормально формируется.
Вопрос стоит в том, чтоб выбрать сначала все товары категории 1, затем все товары категории 2 и т.д.
А в данный момент smarty код считывает категорию и первый товар из нее и переходит к следующей категории.
Где-то я с циклами накосячил и не могу понять где.
Для спасибо весы слева

Последний раз редактировалось yaskin; 16.03.2013 в 22:22.
yaskin вне форума Ответить с цитированием
Старый 17.03.2013, 05:03   #7
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

yaskin
$cates из воздуха получаем? Где присвоение $cates?
Расширение mysql для PHP устарело. Никто его уже не использует. Использовать это расширение это одно и то же, что бегать с палкой за слонами крича "МААААААААААМОНТ УМРИИИИИИИИИИ!" в XXI веке.
Структура таблицы вашей БД не имеет PRIMARY KEY? Почитайте про оптимизацию таблиц в MySQL.

Сначала я написал большой пост по-поводу того, как решить вашу проблему, но потом я понял, что я написал этот ответ используя устаревшие функции, устаревший код для БД с неправильной структурой.
Так что я решил, что лишь укажу вам на ошибку. А как её решать уже решать вам. Либо сделать всё правильно и использовать по-крайней мере MySQLi или PDO, либо продолжить писать устаревший код в ожидании когда ваш хостер обновит версию PHP и внезапно всё перестанет работать.

Ошибка видна невооружённым глазом. Вот здесь
PHP код:
$data[$row['cate_id']] = array( 
                        
'cate_id' => $row['cate_id'],                         
                        
'cate_name' => $row['cate_name'], 
                        
'goods_id'     => $row['goods_id'], 
                        
'goods_name' => $row['goods_name']                         
                        ); 
в массиве $data каждый раз создаётся (или заменяется) элемент с одинаковым ключом id категории. Таким образом на выходе вы получаете количество записей равное количеству различных категорий.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 17.03.2013, 13:12   #8
yaskin
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 112
Вопрос

Спасибо за указание ошибки
т.е. формирование массива должно происходить как-то так?
PHP код:
                    while ($row// Пока есть записи
                    
{    
                        
$data[$row['cate_id']] = array(
                        
'cate_id' => $row['cate_id'],                        
                        
'cate_name' => $row['cate_name'],
                        
'goods_id'     => $row['goods_id'],
                        
'goods_name' => $row['goods_name'],
                        
'price'     => $row['price']                            
                        );
                        while (
$row['cate_id']==$data[$row['cate_id']])
                            {
                                
$row['cate_id'] = array(
                                    
'cate_id' => $row['cate_id'],                        
                                    
'cate_name' => $row['cate_name'],
                                    
'goods_id'     => $row['goods_id'],
                                    
'goods_name' => $row['goods_name'],
                                    
'price'     => $row['price']
                                );
                            } 
Для спасибо весы слева
yaskin вне форума Ответить с цитированием
Старый 20.03.2013, 15:05   #9
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Прочитайте мой последний абзац. Там описана основная проблема. Вы эту проблему снова повторяете в своём коде.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив, вывести по диагонали Naposaram Паскаль, Turbo Pascal, PascalABC.NET 2 31.03.2012 14:36
Вывести линейный массив на экран. badname47 Паскаль, Turbo Pascal, PascalABC.NET 6 19.12.2011 15:40
Массив+FileListBox+Вывести AllerGEN Помощь студентам 7 07.12.2009 12:02
Помогите вывести массив из файла на С + + Olya_Fox Помощь студентам 4 22.10.2009 18:19
вывести массив ровно rev1ver Паскаль, Turbo Pascal, PascalABC.NET 3 18.01.2009 17:45