0

私はmysqlクエリで立ち往生しています。私は3つのテーブルを持っています:

テーブル名:先生

teacherid  teachername 
 1001           ABC
 1002           XYZ

テーブル名:バッチ

batchid   batchname  batch_type     class   batchinstructor     seat
   1        Solar        1            Five     1001               40
   2        Earth        2            Six      1002               40

テーブル名:学生

    studentid studentname batchid
     1          Bon Jovi     1
     2          Shane Warne  2
     3          John Denver  1
     4          Steve Wuagh  2
     5          Perterson    2

達成したいこと

 batchname class  teachername seat  students_enrolled  seat_available
   Solar   Five    ABC          40           2              38
   Earth   six     XYZ          40           3              37

私はcodeigniterを使用しており、上記のすべてのことを達成することができましたstudents_enrolledseat_available

これが私が試したコードです。

      function batch_list($perPage,$uri) { 
    $this->db->select('*');
    $this->db->from('batch');
    $this->db->join('teacher', 'batch.batchinstructor = teacher.teacherid');
    $this->db->order_by('batchid','DESC');
    $getData = $this->db->get('', $perPage, $uri);
    if($getData->num_rows() > 0)
    return $getData->result_array();
        else
        return null;
    }

mysqlクエリを手伝っていただけませんか。私はCodeigniterを使用していることに注意してください。

前もって感謝します

4

2 に答える 2

2

純粋なSQLでは、必要なクエリは次のとおりです。

SELECT
  b.batchname, b.class, t.teachername, b.seat,
  COUNT(s.studentid) AS students_enrolled,
  b.seat - COUNT(s.studentid) AS seat_available
FROM batch b
LEFT JOIN Teacher t ON t.teacherid = b.batchinstructor
LEFT JOIN students s ON s.batchid = b.batchid
GROUP BY s.batchid
ORDER BY b.batchid DESC

あなたがする必要があるのはこのCodeIgniterを翻訳することです-@Bronchaによって提案されたように、あなたはすることができます:

$result = $this->db->query($sql);
于 2012-04-24T11:00:03.013 に答える
1

これはクエリです:

$sql = "select 
b.batchname,
b.class,
t.teachername,
b.seat,
count(s.id) as students_enrolled,
(seat - count(s.id)) as seat_available,
from batch b
join teacher t on t.teacherid = b.batchinstructor
join student s on s.batchid = b.batchid
group by s.batchid
order by b.batchid desc";

次のように直接使用できます。

$this->db->query($sql);
于 2012-04-24T10:45:15.410 に答える