1

より多くの経験を積むために、PHP で学校タイプの CMS システムを作成しています。たとえば、学校のカテゴリを一覧表示する schedule.php ページを作成しました。

会計学 生物学 数学 コンピュータサイエンス

2 つのアカウンティング クラスがあるため、データベースから取得したカテゴリ Accounting(2) の横に数字を追加します。たとえば、Computer Science には 10 のクラスが教えられているため、Computer Science(10) にする必要があります。

私のコードは、教えられたクラスの数ではなく、科目の名前のみを表示します。

ここに私のコードがあります:

<?php


include('connect.php');

if(!isset($_GET['id']))
{
    ?>
    <table border="1" width="15%" height="137">
<tr>
    <td><?php

    //$query1 = mysql_query("SELECT * FROM categories ORDER BY category_name") or die(mysql_error());


    $query1 = mysql_query("SELECT CONCAT(a.category_name, ' (', COUNT(b.category_id), ')') AS category

FROM カテゴリ a LEFT JOIN クラス b ON a.id = b.category_id GROUP BY a.id, a.category_name") または die(mysql_error());

    while($row = mysql_fetch_object($query1))
    {
        print "<a href='schedule.php?id=" . $row->id .  "'>" . $row->category . "</a><br/>";
    } ?></td>
</tr>

    <?php


}
//if you click on the subject
else if(isset($_GET['id']))
{
    $category = $_GET['id'];
    $sql = "SELECT * FROM classes WHERE category_id = " . $category;
    $query2 = mysql_query($sql) or die(mysql_error());


    while($row = mysql_fetch_object($query2))
    {
    ?>

    <center><h3><?php echo $row->class_name . '-' . $row->units; ?>  </h3></center>
    <table border ="0" wdith="100%">
    <tr>
    <td>
    <strong>Description: </strong>
    <?php echo $row->class_description; ?>
    </tr>
    </td>
    </table>
    <br/>
    <table border="1" width="44%">
<tr>
    <td width="60"><b>Ticket</b> </td>
    <td width="123"><b>Days</b></td>
    <td width="120"><b>Hours</b></td>
    <td width="64"><b>Room</b></td>
    <td><b>Instructor</b></td>
</tr>


    <tr>
    <td width="60"> <?php echo $row->ticket; ?> </td>
    <td width="123"><?php echo $row->days; ?></td>
    <td width="120"><?php echo $row->start_hours . $row->time_format . '-' . $row->end_hours . $row->time_format2 ;  ?> </td>
    <td width="64"> <?php echo $row->room_number; ?></td>
    <td><?php echo $row->instructor_name;  ?></td>
</tr>

    }//end while

}//end else if

?>

ありがとう

4

2 に答える 2

1

おそらく、結合句とグループ化句を含むクエリを使用するのが最善でしょう。次のようになります。

SELECT 
    ca.*, 
    COUNT(cl.id) AS class_count 
FROM 
    categories ca 
    LEFT JOIN classes cl ON cl.category_id = ca.id 
GROUP BY ca.id
于 2012-07-23T22:15:21.720 に答える
1

スキーマが次の行に沿っていると仮定します。

+---------------+     +--------------------+
| categories    |     | classes            |
+---------------+     +--------------------+
| ID            |     | id                 |
| category_name |     | category_id        |
| etc..         |     | etc...             |
+---------------+     +--------------------+

classes.category_idを参照する外部キーはどこcategories.idにありますか。非常に簡単な解決策があります。

SELECT a.ID, CONCAT(a.category_name, ' (', COUNT(b.category_id), ')') AS category
FROM categories a
LEFT JOIN classes b ON a.ID = b.category_id
GROUP BY a.ID, a.category_name

これにより、クラスの数が各カテゴリに連結されます。元。

Biology (4)
Computer Science (10)
etc...

categoryまた、PHP でクエリの列を参照するだけです。

while($row = mysql_fetch_object($query1))
{
    print "<a href='schedule.php?id=" . $row->ID .  "'>" . $row->category . "</a><br/>";
}
于 2012-07-23T22:16:59.520 に答える