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

PILIH dan daftarkan anak dan orang tua

Coba biola ini http://sqlfiddle.com/#!2/0a9c5/16 , kode sql di bawah

SELECT c.rule_id, c.rule_title, GROUP_CONCAT(r.rule_title)
FROM RULES_TABLE AS c
LEFT JOIN RULES_TABLE AS r
    ON r.parent_id = c.rule_id
WHERE c.parent_id IS NULL AND c.public = 1
GROUP BY c.rule_id
ORDER BY c.cat_position, c.rule_position;

mengabaikan php-isasi kode dengan sengaja untuk mempertahankan penyorotan sintaks, yang tampaknya tidak berfungsi

Jika Anda melebihi ukuran group_concat maksimum yang diizinkan, Anda dapat meningkatkannya atau menggunakan versi berikut, dan melakukan lebih banyak pemrosesan di php:

SELECT c.rule_id, c.rule_title, r.rule_title as r_rule_title
FROM RULES_TABLE AS c
LEFT JOIN RULES_TABLE AS r
    ON r.parent_id = c.rule_id
WHERE c.parent_id IS NULL AND c.public = 1
ORDER BY c.cat_position, c.rule_position;

dan di php, hanya disediakan kode kerangka, isi dengan nilai sebenarnya, dengan asumsi Anda menggunakan pdo dan var pdostatement Anda bernama $query :

$old_rule_id = null;
$rrt = array(); // will contain all r.rule_titles for a give c.rule_id
while( ($i = $query->fetch(PDO::FETCH_OBJ)) !== false ) {
    if( $old_rule_id != $i->rule_id ) {
        if( count($rrt) ) {
            echo ... all the data for previous rule from $rrt ...
            echo ... end of previous element ...
            $rrt = array(); // empty it to collect new data
        }
        echo ... start of current element use data from $i->rule_id and $i->rule_title ...
        $old_rule_id = $rule_id;
    }
    $rrt[] = $i->r_rule_title;
}
// the following is the same if from inside the while, minus reinitialization of $rrt;
if( count($rrt) ) {
    echo ... all the data for previous rule from $rrt ...
    echo ... end of previous element ...
}

ganti barang di antara ... dengan kode yang valid



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. apa gunanya opsi kumpulan di database.yml?

  2. Cara Query kolom JSON di MySQL

  3. Cara Mendapatkan Meta Data Basis Data

  4. Cara Mengganti MySQL dengan Percona di Plesk CentOS 7

  5. Cara Menggunakan Peran yang Telah Berubah di MySQL 8.0