Количество книг в категории в системе управления библиотеками

#php #mysql

Вопрос:

Я создаю систему управления библиотеками с использованием PHP, Mysql. Для каждой книги есть своя категория. Пользователи смогут увидеть, сколько книг в каждой категории. Но я не могу понять, сколько книг в каждой категории. Я хочу узнать, сколько книг есть в каждой категории.

  <div class="row">
            <div class="col-md-12">
                <!-- Advanced Tables -->
                <div class="panel panel-default">
                    <div class="panel-heading">
                       Categories Listing
                    </div>
                    <div class="panel-body">
                        <div class="table-responsive">
                            <table class="table table-striped table-bordered table-hover" id="dataTables-example">
                                <thead>
                                    <tr>
                                        <th>#</th>
                                        <th>Category</th>
                                        <th>Book Amount</th>
                                        <th>Status</th>
                                        <th>Creation Date</th>
                                        <th>Updation Date</th>
                                        <th>Action</th>
                                    </tr>
                                </thead>
                                <tbody>
       <?php 

       $sql = "SELECT tblcategory.CategoryName, tblcategory.Status, tblcategory.CreationDate,         tblcategory.UpdationDate from tblcategory";
     $query = $dbh -> prepare($sql);
     $query->execute();
     $results=$query->fetchAll(PDO::FETCH_OBJ);
    $cnt=1;
   if($query->rowCount() > 0)
  {
  foreach($results as $result)
    {               ?>                                      
                                    <tr class="odd gradeX">
                                        <td class="center"><?php echo htmlentities($cnt);?></td>
                                        <td class="center"><?php echo  htmlentities($result->CategoryName);?></td>
                                        
                                        <td class="center">#</td>
                                        
                                        <td class="center"><?php if($result->Status==1) {?>
                                        <a href="#" class="btn btn-success btn-xs">Active</a>
                                        <?php } else {?>
                                        <a href="#" class="btn btn-danger btn-xs">Inactive</a>
                                        <?php } ?></td>
                                        <td class="center"><?php echo htmlentities($result->CreationDate);?></td>
                                        <td class="center"><?php echo htmlentities($result->UpdationDate);?></td>
                                        <td class="center">

                                        <a href="edit-category.php?catid=<?php echo htmlentities($result->id);?>"><button class="btn btn-primary"><i class="fa fa-edit "></i> Edit</button> 
                                      <a href="manage-categories.php?del=<?php echo htmlentities($result->id);?>" onclick="return confirm('Are you sure you want to delete?');"" >  <button class="btn btn-danger"><i class="fa fa-pencil"></i> Delete</button>
                                        </td>
                                     </tr>
                  <?php $cnt=$cnt 1;}} ?>                                      
                                 </tbody>
                             </table>
                         </div>
                        
                    </div>
                </div>
                <!--End Advanced Tables -->
            </div>
        </div>
 

Моя База данных:
введите описание изображения здесь
введите описание изображения здесь

Результат должен быть: введите описание изображения здесь

Ответ №1:

Рассчитайте количество книг по категориям с помощью подзапроса. Затем используйте ЛЕВОЕ СОЕДИНЕНИЕ с основной таблицей. Используйте COALESCE() для замены нулевого значения на 0.

 SELECT c.CategoryName
     , COALESCE(b.book_amount, 0) book_amount
     , CASE WHEN c.Status = 1 THEN 'Active' ELSE 'Inactive' END Status
     , c.CreationDate
     , c.UpdationDate
FROM category c
LEFT JOIN (SELECT catid
                , COUNT(id) book_amount
           FROM book
           GROUP BY catid) b
       ON c.id = b.catid
ORDER BY b.book_amount DESC