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

Bagan silsilah/silsilah keluarga dari database

Saya telah menyelesaikan masalah beberapa bulan yang lalu ... Saya memposting jawaban, jadi ini mungkin bermanfaat bagi sesama pengembang lainnya ... p.s. Proyek ini ditulis dalam Yii 1.1

Pertama, di HorseController my saya menetapkan variabel tipe array pribadi di mana saya akan menyimpan Pedigree:

private $horses = array();

Kemudian, saya menulis fungsi yang akan mendapatkan semua node (orang tua) dari database:

public function getParents($id)
{
    global $horses;
    $horses[] = Horses::model()->findByPk($id)->horse_id;
    if($this->loadModel($id)->horse_sire != null && $this->loadModel($id)->horse_dam != null)
    {
        $this->getParents($this->loadModel($id)->horse_sire);
        $this->getParents($this->loadModel($id)->horse_dam);
    }
    return $horses;
}

Kemudian, saya memodifikasi ActionView fungsi, di mana semua node dari database akan diteruskan ke View

public function actionView($id)
{
    $this->horses = $this->getParents($id);
    $this->render('view',array(
        'model'=>$this->loadModel($id),
        'parents'=>$this->horses,
    ));
}

Dan akhirnya sedikit KODE JELEK yang akan menunjukkan silsilah (seperti ini Kueri Silsilah ) :)

<table>
            <?php
                $reverse_multiplier = (count($parents)+1)/2;
                $last_node_count = 0;
                for($i = 0; $i < count($parents); $i++)
                {
                    if($i == 0 && $last_node_count ==1)
                        echo "<tr>";

                    echo "<td rowspan='$reverse_multiplier'>";

                    echo "<a href=".Yii::app()->baseUrl."/index.php/horses/".Horses::model()->model()->findByPk($parents[$i])->horse_id." >";
                    echo Horses::model()->model()->findByPk($parents[$i])->horse_name;
                    echo "</a>";
                    echo "<br/>";
                    echo Horses::model()->model()->findByPk($parents[$i])->horse_yob;

                    echo "</td>";
                    if($reverse_multiplier == 1 || $reverse_multiplier == 0.5)
                        echo "</tr>";

                    if($reverse_multiplier == 0.5 && $last_node_count <= (count($parents)+1)/4)
                        $reverse_multiplier = (count($parents)+1)/8;
                    else
                        $reverse_multiplier = $reverse_multiplier/2;

                    if($last_node_count == (count($parents)+1)/4)
                    {
                        $reverse_multiplier = (count($parents)+1)/4;
                        $last_node_count=0;
                    }
                    if($reverse_multiplier == 0.5 || $reverse_multiplier == 1)
                        $last_node_count++;
                }
            ?>
        </table>

Sekian :) Semoga bermanfaat...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi MySQL PI() – Mengembalikan Nilai (pi)

  2. pembunuhan mysqld yang tidak tepat - sekarang tidak dimulai

  3. org.hibernate.InstantiationException:Tidak ada konstruktor default untuk entitas::principal.Cliente

  4. Pertanyaan MySQL tentang penjadwalan

  5. Cara Memverifikasi Cadangan MySQL Anda dengan ClusterControl