SELECT MAX查询只返回1个变量+ codeigniter

时间:2009-11-03 10:19:31

标签: sql select codeigniter

我使用codeigniter并遇到有关SELECT MAX的问题...我无法在Google搜索中找到任何解决方案......

它看起来只返回id:/它为表的其他列提供错误:/

感谢帮助,谢谢!


型号:

   function get_default() 
   {
        $this->db->select_max('id');
        $query = $this->db->getwhere('gallery', array('cat' => "1"));   

        if($query->num_rows() > 0) {
             return $query->row_array(); //return the row as an associative array
        }
    }

控制器:

$default_img = $this->blabla_model->get_default();
$data['default_id'] = $default_img['id']; // it returns this
$data['default_name'] = $default_img['gname']; // it gives error for gname although it is at table

4 个答案:

答案 0 :(得分:5)

为了实现您的目标,您希望的SQL看起来像:

SELECT *
FROM gallery
WHERE cat = '1'
ORDER BY id
LIMIT 1

并使用CodeIgniter数据库类:

$this->db->select('*');
$this->db->where('cat', '1');
$this->db->order_by('id', 'DESC'); 
$this->db->limit(1);
$query = $this->db->get('gallery');

答案 1 :(得分:4)

这是正确的:select_max仅返回值,而不返回其他列。从规格:

$this->db->select_max('age');
$query = $this->db->get('members');
// Produces: SELECT MAX(age) as age FROM members

您可能需要先读取该值,然后再运行另一个查询 对于ID,您还可以使用$id = $this->db->insert_id();

另请参阅:http://www.hostfree.com/user_guide/database/active_record.html#select

答案 2 :(得分:1)

如果没有其他选择,CodeIgniter将选择*。通过设置select_max(),您将填充select属性,因此您只需要该值。

要解决此问题,只需将select_max()和select()组合起来:

$this->db->select('somefield, another_field');
$this->db->select_max('age');

甚至:

$this->db->select('sometable.*', FALSE);
$this->db->select_max('age');

应该做的伎俩。

答案 3 :(得分:0)

应该注意的是,你当然也可以在CodeIgniter中使用你自己的“自定义”sql语句,你不仅限于你到目前为止所概述的活动记录sql函数。 CodeIgniter提供的另一个有效记录功能是$ this-> db-> query();这允许您提交自己的SQL查询(包括变量),如下所示:

function foo_bar()

{
   $cat = 1;
   $limit = 1;
   $sql = "
        SELECT *
        FROM gallery
        WHERE cat = $cat
        ORDER BY id
        LIMIT $limit
   ";
   $data['query'] = $this->db->query($sql);
   return $data['query'];
}

最近我一直在利用这一点,因为我一直在做一些很难(如果不讨厌或不可能)使用CI的显式活动记录功能。 我意识到你可能已经知道了这一点,只是认为它有助于为后代提供帮助。

2个有用的链接是:

http://codeigniter.com/user_guide/database/results.html

http://codeigniter.com/user_guide/database/examples.html