簡體   English   中英

MySQL多左聯接和多個計數與條件codeigniter

[英]mysql multiple left join and multiple count with condition codeigniter

我有這樣的桌子

1.koperasi:

+--------+-----------------------+
| kop_id | nama                  |
+--------+-----------------------+
|      0 | Koperasi Sampuabalo   |
|      6 | Koperasi Pinjam Lunas |
|     10 | koperasi asal pinjam  |
+--------+-----------------------+

2. koperasi_anggota:

+------------+--------+------------------+
| anggota_id | kop_id | nik              |
+------------+--------+------------------+
|          8 |     10 | 7868678678787832 |
|         10 |      6 | 7868678678787832 |
|         11 |      0 | 7470000000024320 |
|         12 |     10 | 7470000000024320 |
|         13 |     10 | 7470000000000002 |
+------------+--------+------------------+

3,安哥拉

+------------------+-------------------+-------------+
| nik              | nama              | kelamin     |
+------------------+-------------------+-------------+
| 7470000000000002 | Laba Rugi         | Laki - Laki |
| 7470000000024320 | Evy Rama Suciyani | Perempuan   |
| 7470480283402384 | La Tundru         | Laki - Laki |
| 7868678678787832 | Adelyn            | Perempuan   |
+------------------+-------------------+-------------+

我想創建這樣的結果:

+----------------------+-------------------+-------------+-----------+
| koperasi_nama        | man               | woman       | Total     |
+----------------------+-------------------+-------------+-----------+
| koperasi asal pinjam | 1                 | 2           | 3         |
| next row             |  next  row        | next  row   |next  row  |
+----------------------+-------------------+-------------+-----------+

我的查詢:

select c.nama as koperasi_nama, 
       COUNT(IF( a.kelamin = 'Laki - Laki' , 1 , 0)) as man, 
       COUNT(IF( a.kelamin = 'Perempuan' , 1 , 0)) as woman 
from anggota a 
    LEFT join koperasi_anggota b on a.nik=b.nik 
    LEFT JOIN koperasi c on b.kop_id=c.kop_id 
GROUP BY(c.kop_id)

但是,結果是這樣的:

+-----------------------+-----+-------+
| koperasi_nama         | man | woman |
+-----------------------+-----+-------+
| NULL                  |   1 |     1 |
| Koperasi Sampuabalo   |   1 |     1 |
| Koperasi Pinjam Lunas |   1 |     1 |
| koperasi asal pinjam  |   3 |     3 |
+-----------------------+-----+-------+

MySQL多左聯接和多個計數與條件codeigniter

有人能幫我嗎 ? 以及如何在codeigniter上執行此操作?

https://www.codeigniter.com/userguide3/database/query_builder.html

//heres how you convert your current query to CI query builder

$query = $this->db->select('c.nama as koperasi_nama, 
   COUNT(IF( a.kelamin = 'Laki - Laki' , 1 , 0)) as man, 
   COUNT(IF( a.kelamin = 'Perempuan' , 1 , 0)) as woman ')
 //equivlant to :LEFT join koperasi_anggota b on a.nik=b.nik
->join('koperasi_anggota b', 'a.nik=b.nik', 'left')
->join('koperasi c', 'b.kop_id=c.kop_id', 'left')
->group_by('c.kop_id')
//from anggota a ->return results as an array, can also do result() to return as objects
->get('anggota a')->result_array();

您還可以將原始sql轉換為變量,然后查詢它:

$sql = "SELECT k.nama as koperasi_nama,
 sum(a.kelamin = 'Laki - Laki') man,
 sum(a.kelamin = 'Perempuan') woman,
 count(a.kelamin) total
FROM koperasi k INNER JOIN koperasi_anggota ka ON k.kop_id = ka.kop_id
 INNER JOIN anggota a ON ka.nik = a.nik
 group by k.kop_id";

$results = $this->db->query($sql)->result_array();

請嘗試以下查詢:

SELECT k.nama as koperasi_nama,
 sum(a.kelamin = 'Laki - Laki') man,
 sum(a.kelamin = 'Perempuan') woman,
 count(a.kelamin) total
FROM koperasi k INNER JOIN koperasi_anggota ka ON k.kop_id = ka.kop_id
 INNER JOIN anggota a ON ka.nik = a.nik
 group by k.kop_id;

輸出:

+-----------------------+------+-------+-------+
| koperasi_nama         | man  | woman | total |
+-----------------------+------+-------+-------+
| Koperasi Sampuabalo   |    0 |     1 |     1 |
| Koperasi Pinjam Lunas |    0 |     1 |     1 |
| koperasi asal pinjam  |    1 |     2 |     3 |
+-----------------------+------+-------+-------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM