0

我必须通过从不同的两个表中获取 Users_height 和 users_weight 来计算用户的 BMI。

这是两张表(http://i.stack.imgur.com/eOQs4.gif)和(http://i.stack.imgur.com/liqhH.gif

期望的输出

  weight_pounds    height_cm 
     121.25           130
     132.28           160
     154.32           221
     176.37           434

user_weight 表 在此处输入图像描述

user_height 表 在此处输入图像描述

我试过这个功能,但它显示错误:

 function get_all_user_bmi($uid) 
{ 
    $this->load->database(); 
    $this->db->select('w.weight_pounds','h.height_cm');
    $res = $this->db->order_by('w.uweight_id', 'ASC')->order_by('h.height_id', 'ASC')
            ->get_where('user_weight w',array('w.creater_id'=>$uid))
            ->get_where('user_height h',array('w.creater_id'=>$uid))
            ;
    $ret = array();

    foreach ($res->result_array() as $row) {
        $weight=$row['w.weight_pounds']* 4.88;
        $height=($row['h.height_cm']*0.032808)*($row['h.height_cm']*0.032808);  
        $bmi=$weight/$height;
        $ret[] = $bmi;  //final bmi formuala calculated
    }

    return $ret;
}  

错误是:

 A Database Error Occurred

Error Number: 1054

Unknown column 'h.height_id' in 'order clause'

SELECT `w`.`weight_pounds` FROM (`user_weight` w) WHERE `w`.`creater_id` = '3235' ORDER BY `w`.`uweight_id` ASC, `h`.`height_id` ASC

Filename: D:\xampp\htdocs\webapp\system\database\DB_driver.php

Line Number: 330

希望有人可以在这里帮助我...

更新

在两个列中添加了额外same_id的列以满足要求并添加了$this->db->join('user_height h' ,'w.same_id = h.same_id'); 这段代码,现在它工作正常

4

2 回答 2

1

join在您尚未加入表格的情况下尝试此操作,如果您需要身高、体重等用户详细信息,那么在表格中您应该将用户信息与用户 ID 一起保存在两个表格中,因为存在一对关系,然后根据该用户 id 加入您的表以计算用户的 bmi

$this->db->select('w.weight_pounds, h.height_cm');
$res = $this->db->join('user_height h' ,'w.user_id= h.user_id')
         ->order_by('w.uweight_id', 'ASC')->order_by('h.height_id', 'ASC')
        ->get_where('user_weight w',array('w.creater_id'=>$uid));

或者

$this->db->select('w.weight_pounds, h.height_cm');
$this->db->from('user_weight w');
$this->db->join('user_height h' ,'w.user_id= h.user_id')
$this->db->where('w.creater_id',$uid); 
$this->db->where('h.creater_id',$uid); 
$this->db->order_by('w.uweight_id', 'ASC')->order_by('h.height_id', 'ASC')
$query = $this->db->get();

在循环中只需使用列名

foreach ($res->result_array() as $row) {
        $weight=$row['weight_pounds']* 4.88;
        $height=($row['height_cm']*0.032808)*($row['height_cm']*0.032808);  
        $bmi=$weight/$height;
        $ret[] = $bmi;  //final bmi formuala calculated
    }

参考活动记录

于 2013-09-14T15:28:16.830 回答
0

参考@dianuj 答案,我的一点点努力和搜索,我找到了一个解决方案:

为了区分两个表,我使用每个相同输入的额外列 same_id 。喜欢

ON  w.same_id = h.same_id

最后我的代码如下所示,解决了我的问题

$this->load->database(); 
$this->db->select('w.weight_pounds, h.height_cm'); 
$this->db->from('user_weight w','user_height h');
$this->db->join('user_height h' ,'w.same_id = h.same_id');
$this->db->where('w.creater_id',$uid); 
$this->db->where('h.creater_id',$uid); 
$this->db->group_by('w.weight_pounds');
$this->db->order_by('w.uweight_id', 'ASC')->order_by('h.height_id', 'ASC');  
$res = $this->db->get(); 
$ret = array(); 
foreach ($res->result_array() as $row) {
    $weight=$row['weight_pounds']* 4.88;
    $height=($row['height_cm']*0.032808)*($row['height_cm']*0.032808);  
    $bmi=$weight/$height;
    $ret[] = $bmi;  //final bmi formuala calculated

}
于 2013-09-14T21:00:27.597 回答