Показывать количество заводов за категориями на боковой панели. автор кода

У меня есть боковая панель с категориями. когда я нажимаю на одну категорию, она показывает мне фабрики, расположенные в этой категории.

Я сделал это, используя соединения в codeigniter.

Теперь я хочу показать, сколько заводов находится в категории. так например:

Categories.

Cars (2)
Books (7)
Animals (45)

Таким образом, нужно просто показать, сколько заводов имеют эту конкретную категорию.

я попытался сделать простой count_all_results, но затем я получил общее количество заводов. но я хочу, чтобы они учитывались по конкретному идентификатору категорий.

моя модельная функция:

function categorieen_getall($segment3)
{
    $this->db->where('categorieen.idcategorieen', $segment3);
    $this->db->select('*');
    $this->db->from('bedrijfcategorieen');
    $this->db->join('categorieen', 'categorieen.idcategorieen = bedrijfcategorieen.idcategorieen');
    $this->db->join('bedrijven', 'bedrijven.idbedrijven = bedrijfcategorieen.idbedrijven');
    $query = $this->db->get();
    $result = $query->result();
    /*
    echo '<pre>';
    print_r($result);
    */
    return $result;
}

Моя функция контроллера:

    function get_All()
    {
        $data['cat'] = $this->categorieen_model->categorieen_getall($segment3);
        $this->load->view('views/sidebar', $data);
    }

Мой взгляд:

    <div id="sidebar">
    <?php
    echo '<h3>Categorieën</h3>';
    echo ($this->db->count_all_results('categorieen')); 

    ?>

        <hr>
        <br/>
        <?php
        echo '<ul>';
        if(isset($cat) && is_array($cat)){
            foreach($links as $k => $value){

                echo '<li>';
                echo '<br>';
                echo '<a href="'.base_url().'home/categorie/'.$value->idcategorieen.' ">' .$value->Categorie. '</a>';
                echo '</li>';

            }
        }
        echo '<ul>';
        /*
        if(isset($cat ) && is_array($cat )){
            foreach($cat as $key => $row){
                echo "Categorie:"; echo $row->Categorie;
                echo "<br />";
                echo $row->idcategorieen;
                echo "<br />";
                echo $row->Bedrijfsnaam;
            }
        }
        */
        ?>
</div>

Моя схема базы данных:

Factories
--------
idfactories
factoryname
adress
email
...

Categories
----------
idcategories
Category


Factorycategories
-----------------
idfactorycategories
idcategories
idfactories

person Kees Sonnema    schedule 02.04.2013    source источник
comment
Извините, с какой именно проблемой вы столкнулись?   -  person Shoe    schedule 02.04.2013
comment
я попытался показать количество записей, которые имеют определенную категорию. поэтому на моей боковой панели у меня есть категории. но я хочу, чтобы за этим стояло количество фабрик, например: Категория 1 (2), где 2 - это фабрики с этой конкретной категорией.   -  person Kees Sonnema    schedule 02.04.2013
comment
я только что сделал echo ($this-›db-›count_all_results('bedrijven')); но это показывает мне все фабрики как целое число. но я хочу их для определенного идентификатора.   -  person Kees Sonnema    schedule 02.04.2013


Ответы (2)


Это не совсем подходит, потому что я знаю, что есть лучший способ сделать это, но это сделает работу за вас:

// Get categories
$categories = array();

$query = $this->db->query("select * from `Categories` order by `idcategories`");

if($query->num_rows() > 0)
{
  foreach($query->result_array() as $row)
  {
    $query_count = $this->db->query("select `idfactorycategories` from `Factorycategories` where `idcategories` = {$row['idcategories']}");
    $factory_count = $query_count->num_rows();

    $categories[] = array(
      'count' => $factory_count 
    );
  }
}

Для простоты вы можете сначала получить категории в цикле foreach, а затем для каждой из них отправить запрос для таблицы factories, чтобы получить соответствующее количество фабрик с идентификатором соответствующей категории.

person MahanGM    schedule 02.04.2013
comment
у меня нет строки категории в моей таблице фабрик. я использую таблицу factorycategories с объединенными идентификаторами. так это что-то изменит? - person Kees Sonnema; 02.04.2013
comment
Я не знаю ваших схем таблиц, но я думаю, что вы можете заменить правильный код в моей. - person MahanGM; 02.04.2013
comment
можете ли вы объяснить строку, где написано {$row['id']}); ? - person Kees Sonnema; 02.04.2013
comment
я могу опубликовать мою схему базы данных выше. так, может быть, это немного яснее для вас. я все еще новичок в codeigniter :) - person Kees Sonnema; 02.04.2013
comment
Он получает текущий идентификатор категории, который загружается в переменную $row. Это означает, что мы получаем идентификатор текущей категории и передаем его таблице factories. - person MahanGM; 02.04.2013
comment
см. мою схему базы данных выше. - person Kees Sonnema; 02.04.2013
comment
Хорошо, я вижу это сейчас и собираюсь отредактировать свой ответ в соответствии со схемой. - person MahanGM; 02.04.2013
comment
так куда я должен положить это? прямо на мой взгляд или в моей модели/контроллере? - person Kees Sonnema; 02.04.2013
comment
Обычно я выполняю работу с моделью в своих контроллерах, вы можете сделать то же самое, и вы должны поместить это в свою соответствующую функцию перед тем, где вы собираетесь загружать представление категорий. Вы можете использовать categories[] в качестве массива данных и передать его в это представление. Остальная работа зависит от вас. - person MahanGM; 02.04.2013
comment
я не могу заставить его работать. потому что я не очень понимаю. - person Kees Sonnema; 02.04.2013
comment
вы можете увидеть, как это выглядит на данный момент, на странице kees.een-site-bouwen.nl на левой боковой панели. это теперь эхо всех заводов. но в каждой категории не по 8 заводов. - person Kees Sonnema; 02.04.2013
comment
Я дал вам идею. Вы должны согласовывать это со своей логикой. - person MahanGM; 02.04.2013
comment
Знаете ли вы, сколько SQL-запросов выполняется только для того, чтобы отобразить это на боковой панели? Если у вас есть N категорий, вы будете вызывать свою БД N+1 раз с помощью этого цикла foreach. - person WebNovice; 03.04.2013
comment
нет ли более короткого и более простого пути? - person Kees Sonnema; 03.04.2013

Я задал другой вопрос. с той же проблемой, и я решил ее.

Посмотрите на мой собственный ответ с решением, которое я получил!

Подсчитайте результаты в объединенной таблице и покажите между () на боковой панели

Спасибо людям, которые мне помогли :)

person Kees Sonnema    schedule 01.05.2013