2011-07-11 2 views
3

enter image description herecroissance de la production entre numérique Champs de données dans la base de données

Je voudrais sortir le pourcentage de croissance entre 20 ans et 19 ans, je devrais être en mesure de dire « Hauteur croissance = 3 » (En prenant la hauteur 178-175) ou qu'il y avait une "croissance en hauteur = 0,017%" (178/175).

Mon code ressemble à ceci

<table> 
    <thead><tr><td>Age</td><td>Height</td><td>Height Growth %</td><td>Weight</td></tr> </thead> 
    <tbody> 
<?php foreach ($healthdata->result_array() as $row) { 
     echo "<tr><td>".$row['age']."</td><td>".$row['height']."</td><td>%</td> <td>".$row['weight']."</td></tr>"; } ?> 
    </tbody></table> 

Mon modèle ressemble à ceci

function display_healthdata() 
{ 
    $healthdata = $this->db->query("select * from healthdata where id = '1' order by age desc;"); 

    return $healthdata; 
} 

Essentiellement, je ne sais pas quel genre de déclaration SQL que je peux faire ou ce code, je dois écrire être capable de faire ces calculs. J'ai aussi pensé qu'il ne serait peut-être pas possible de faire ce calcul sur la base de données ou en PHP et que je pourrais avoir besoin de le faire côté client plutôt que côté serveur.

S'il vous plaît laissez-moi savoir quelle autre information je peux/devrait ajouter pour que vous soyez plus utile.


Problem solved Alors que les gens à trouver ce code sont aidés ... Le code j'ai utilisé pour cette question était la suivante:

SELECT t1.*, (t1.height - IFNULL(t2.height, 0)) AS growth 
FROM healthdata AS t1 
LEFT JOIN healthdata AS t2 
ON (t2.age = (t1.age - 1)) 
where t1.id = '1' 
group by age 
+0

À mon avis Heght la croissance est de 1,7%, et non 0,017% :) – Karolis

Répondre

2

Vous pouvez le faire avec des jointures SQL ... Je suis trop fatigué pour réellement donner une bonne réponse, mais voici un lien vers un problème qui semble similaire au vôtre. = D

How to get difference between two rows for a column field?

EDIT

Je vais prendre une fissure à elle. PAS garanti de ne pas faire exploser votre maison; comme dit, je suis très fatigué;)

 
SELECT t1.*, (t1.height - IFNULL(t2.height, 0)) AS growth 
FROM healthdata AS t1 
LEFT JOIN healthdata AS t2 
ON (t2.age = (t1.age - 1))
+0

You rock! Cela a vraiment aidé! –

+0

=) Pas de problème.^_ ^ – Ryan

0

Pour cela, vous devez insérer une logique dans votre présentation. Et je décourage fortement de le faire. Quoi qu'il en soit

<?php 

    $cache=array(); 
    foreach ($healthdata->result_array() as $row) { 
     echo "<tr>...</tr>"; 

     if ($row['age'] == 19) 
     $cache['19'] = $row['height']; 
     else if ($row['age'] == 20) 
     $cache['20'] = $row['height'];   
    } 

    $growth = $cache['20']-$cache['19']; 
    echo '<tr><td colspan="4">The growth is '.$growth.'</td></tr>'; 
?> 

Attention, il y a 2 ou 3 mauvaises pratiques que vous ne devriez pas faire.

Questions connexes