我使用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
答案 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个有用的链接是: