sql >> Databáze >  >> RDS >> Mysql

Tabulka rodokmenu/rodokmenu z databáze

Problém jsem již vyřešil před několika měsíci... posílám odpověď, takže by to mohlo být užitečné pro ostatní vývojáře...p.s. Projekt byl napsán v Yii 1.1

Nejprve v mém HorseController přiřazena proměnná typu private array, kde budu uchovávat Pedigree:

private $horses = array();

Poté jsem napsal funkci, která získá všechny uzly (rodiče) z databáze:

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;
}

Poté jsem upravil ActionView funkce, kde budou všechny uzly z databáze předány View

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

A nakonec trochu Ošklivého KÓDU, který ukáže rodokmen (jako tento Dotaz na rodokmen ) :)

<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>

A je to :) Doufám, že to bylo užitečné...




  1. Proč MySQL COUNT bez názvu tabulky dává 1

  2. Rozlišují se v názvech sloupců a tabulek v MySQL velká a malá písmena?

  3. Jak mohu vytvořit primární klíč jako AUTOINCREMENT

  4. Když mysql_query vrátí hodnotu false