Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

pilih kueri untuk data kategori dengan hubungan induk anak

Coba gabung sendiri :

EDIT: Saya lupa memasukkan klausa WHERE

SELECT
    a.name,
    b.name,
    c.name
FROM 
    category as a
LEFT JOIN category as b
    ON b.parent_id = a.id
INNER JOIN category as c
    ON c.parent_id = b.id
    AND c.inherit = 'Y'
WHERE
    a.id = 1

Tetapi solusi ideal adalah memiliki fungsi rekursif yang akan melakukan ini karena dalam tabel tersebut Anda menggambarkan pohon kategori . Kueri di atas bersifat statis, ia kembali 2 level (2 subkategori) dan menurut saya Anda memerlukan sesuatu yang dinamis .

Sesuatu seperti fungsi di bawah ini :

public String getCategory(int categId){

    String sSql = "SELECT name FROM category WHERE id = " + categId ;
    String name = oDb.exec(sql).get("name");

    sSql = "SELECT id FROM category WHERE inherit = 'Y' AND parent_id = " + categId ;
    int nextCategId = oDb.exec(sql).get("id");

    if(nextCategId != null){
        return name + "," + getCategory(nextCategId);
    }else{
        return name;
    }

}

Jadi dengan asumsi bahwa kategori Apel mewarisi hasil untuk getCategory(1) seharusnya Fruits,Apples,Green Apples



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql - JELASKAN PILIH dari TAMPILAN mencari di semua baris tabel utama

  2. Mendapatkan file berukuran 0KB saat mencadangkan database mysql menggunakan mysql dump

  3. Nama tabel sebagai parameter menggunakan pernyataan yang disiapkan PDO/MySQL

  4. Jalankan kueri SQL pada startup layanan MySQL

  5. Bagaimana cara membuat database localhost menggunakan mysql?