Категории и подсчёт файлов в них

Discussion in 'PHP' started by Wakko, 1 Feb 2010.

  1. Wakko

    Wakko New Member

    Joined:
    1 Jun 2009
    Messages:
    36
    Likes Received:
    2
    Reputations:
    0
    Code:
    Привет ачатовцам. Есть вопрос:
    
    Вот мы имеем 2 таблицы.(mysql)
    
    1 таблицы с категориямя
    
     id | id_parent | name
    ----------------------------
      1 |       0        | Программы
    ----------------------------
      2 |       1        | Для телефонов
    ----------------------------
      3 |       1        | Для компа
    ----------------------------
      4 |       3        | Для брута
    -------------------------------
    
    Категории выведутся как:
    
     -- Программы
           -- Для телефонов
           -- Для компа
                  -- Для брута
    
    И есть таблица с файлами:
    
     id | cat_id       | name
    ----------------------------
      1 |       3        | Файл 1
    ----------------------------
      2 |       3        | Файл 2
    ----------------------------
      3 |       3        | Файл 3
    ----------------------------
      4 |       3        | Файл 4
    -------------------------------
    
    
    Как сделать на php подсчёт чтобы считались файлы в категориях по примеру:
    
          -- Программы (4)
              -- Для телефонов (0)
              -- Для компа (4)
                 -- Для брута (4)
    
    Кто что подскажет? Чем поможет? :)
     
  2. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    SELECT count(id) FROM table
    ||
    $hand = mysql_query("SELECT id FROM table");
    echo mysql_num_rows($hand);
     
  3. Wakko

    Wakko New Member

    Joined:
    1 Jun 2009
    Messages:
    36
    Likes Received:
    2
    Reputations:
    0
    И как так быдет выводить количеств файлов из под категорий в основную?

    Тоесть если глубоко в какой то подкатегории лежало 4 файла нппример, то в основной категории отображалось бы что всего 4 файла

    Code:
          -- Программы (4)
              -- Для телефонов (0)
              -- Для компа (4)
                 -- Для брута (4)
                         [Файл 1]
                         [Файл 2]
                         [Файл 3]
                         [Файл 4]
    
     
    #3 Wakko, 1 Feb 2010
    Last edited: 1 Feb 2010
  4. LStr1ke

    LStr1ke Elder - Старейшина

    Joined:
    29 Jul 2009
    Messages:
    801
    Likes Received:
    145
    Reputations:
    73
    Ну ппц.
    Ты не наисал название таблиц -> назовем 1 таблицу с категориями - `categs`, 2 - `files`

    PHP:
    ...
    $handle mysql_query("SELECT id,title FROM categs");
    while(list(
    $id,$title) = mysql_fetch_row($handle)) {
    echo 
    "Категория \"$title\" - файлов (".mysql_num_rows(mysql_query("SELECT id FROM files WHERE cat_id = $id")).") <br />";
    }
    ...
    Самый простой вариант
     
  5. Wakko

    Wakko New Member

    Joined:
    1 Jun 2009
    Messages:
    36
    Likes Received:
    2
    Reputations:
    0
    А как сделать посчёт если выводятся вот так
    Code:
        Программы [id = 1] ->
                                          Для смартов [parent_id = 1]
                                          Для Компа [parent_id = 1] 
    
    Тут считает только когда просматриваеш категорию для которой предназначен файл, а мне нужно чтобы считались файлы в подкатегориях и выводилось колличество в основную.
     
  6. Wakko

    Wakko New Member

    Joined:
    1 Jun 2009
    Messages:
    36
    Likes Received:
    2
    Reputations:
    0
    Code:
    <?php
    
    $category = intval($_GET['category']);
    
    if ($category != 0) {
     $tpl->load_tpl('downloads.tpl');
    
     $tpl->set_block("'\\[category\\](.*?)\\[/category\\]'si", "");
     $tpl->set('[cat_navigation]', '');
     $tpl->set('[/cat_navigation]', '');
     $tpl->set('{navigation}', name_cat($category));
    
     $tpl->compile('content');
     $tpl->clear();
    } 
    
    if ($category) {
     $where_cat = "WHERE id_parent = '$category'";
     $where_files = "WHERE category = '$category'";
    } else {
     $where_cat = "WHERE id_parent = 0";
     $where_files = "WHERE category = 0";
    } 
    
    $downloads_files_sql = $db->query("SELECT * FROM downloads_files $where_files");
    $downloads_cat_sql = $db->query("SELECT * FROM downloads_category $where_cat ORDER BY position DESC");
    
    $i = 0;
    while ($row = $db->get_row($downloads_cat_sql)) {
     $i ++;
     $tpl->load_tpl('downloads.tpl');
     $tpl->set_block("'\\[cat_navigation\\](.*?)\\[/cat_navigation\\]'si", "");
     $tpl->set('[category]', '');
     $tpl->set('[/category]', '');
    
     $coun = $db->super_query("SELECT count(*) as count FROM downloads_files WHERE category = '{$row['id']}'");
    
     $tpl->set('[cat_link]', '<a href="' . $PHP_SELF . '?do=downloads&category=' . $row['id'] . '">');
     $tpl->set('[/cat_link]', '</a>');
    
     $tpl->set('{count}', $coun['count']);
     $tpl->set('{category}', check_full($row['name']));
    
     $tpl->compile('content');
     $tpl->clear();
    } 
    
    $b = 0;
    while ($row = $db->get_row($downloads_files_sql)) {
     $buffer .= $row['title'];
     $buffer .= '<br>';
     $b++;
    } 
    
    if ($i == 0 and $b == 0) {
     $buffer .= 'В данной категории ничего нет.<br>';
    } 
    
    $tpl->copy_tpl = $buffer . '<br>';
    $tpl->compile('content');
    $tpl->clear();
    
    ?>
    
     
  7. deedoc

    deedoc New Member

    Joined:
    12 Dec 2007
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    SELECT COUNT(*) FROM files WHERE cat_id = АйДи категории, которую рисуешь в данный момент

    а еще лучше и красивее, если названия категорий выбираются из базы, сделать JOIN и выбрать из таблицы файлов количество файлов, сгруппированных по айдишнику категорий
     
    #7 deedoc, 1 Feb 2010
    Last edited: 1 Feb 2010