我用笨并有关于SELECT MAX的问题......我couldnot找到谷歌搜索的任何解决方案...
它看起来像它仅返回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
为了达到你的目标,你的愿望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');
这是正确的: 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
如果没有别的选择的CodeIgniter将选择*。 通过设置select_max()你是填充选择属性,所以说你只需要那些价值。
为了解决这个问题,只是结合select_max()和select():
$this->db->select('somefield, another_field');
$this->db->select_max('age');
甚至:
$this->db->select('sometable.*', FALSE);
$this->db->select_max('age');
应该做的伎俩。
应当注意的是,你当然也可以利用自己的“自定义”中的SQL语句笨,你不局限于到目前为止你已经列出的活动记录SQL函数。 该笨提供了另一种有效记录的功能是$这 - > DB->查询(); 它允许你提交自己的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