在codeigniter中为每个用户选择最新记录

时间:2014-08-21 07:32:40

标签: php mysql codeigniter

我发现这个查询,我认为这将解决我的问题:

SELECT MemberID, ContractID, StartDate, EndDate
FROM member_contracts 
WHERE ContractId IN (
SELECT MAX(ContractId)
FROM member_contracts 
GROUP BY MemberId
)

这个问题由@Mark Byers提供,作为对另一个问题的回答。

我如何在CodeIgniter中使用此查询,尤其是“Where_in”子句。

感谢

2 个答案:

答案 0 :(得分:1)

在CI中,您可以使用$this->db->query("yourquery");来执行查询。试试

$query=$this->db->query("SELECT MemberID, ContractID, StartDate, EndDate
FROM member_contracts 
WHERE ContractId IN (
SELECT MAX(ContractId)
FROM member_contracts 
GROUP BY MemberId
)");

答案 1 :(得分:1)

您仍然可以使用活动记录库来使用get_compiled_select()

编译子查询
$this->db->select('MAX(ContractId)')
         ->from('member_contracts')
         ->group_by('MemberId');
$subquery = $this->db->get_compiled_select();

$this->db->select('MemberID, ContractID, StartDate, EndDate')
         ->from('member_contracts ')
         ->where("ContractId  IN($subquery)", NULL, FALSE)
         ->get()
         ->result();

此外,您可以使用join而非子查询重写查询以获取每组的最新记录,并且MemberId,ContractId上的复合索引也很有用

SELECT m.MemberID, m.ContractID, m.StartDate, m.EndDate
FROM member_contracts m 
JOIN (
SELECT MemberId,MAX(ContractId) ContractId
FROM member_contracts 
GROUP BY MemberId
) mm
USING(MemberId,ContractId)