De *_*ige 3 php mysql sql codeigniter-2
我正在将我现有的网站转换为CI,并且我已经尝试了几天将此查询转换为CI友好代码:
$result = mysql_query("
SELECT t1.mnumber, t1.mcontent, t1.mcontact
FROM sms t1
JOIN (
SELECT mContent,mcontact, mnumber, MAX(mID) mID
FROM sms
GROUP BY mContact
) t2 ON t1.mcontact = t2.mcontact AND t1.mid = t2.mid
GROUP BY t1.mContact
ORDER BY t1.mid DESC
");
Run Code Online (Sandbox Code Playgroud)
但无论我尝试什么,我都无法在CI上得到正确的结果.
我希望你们能在这里帮助我!
最接近我得到的结果,是当我使用子查询黑客时.然而,出于沮丧,我删除了代码块并继续尝试.
我决定使用平面查询,就像上面发布的那样.这几乎给了我结果.
$query = $this->db->query("SELECT t1.mnumber, t1.mcontent, t1.mcontact FROM sms t1
JOIN (SELECT mContent,mcontact, mnumber, MAX(mID) mID FROM sms GROUP BY mContact) t2
ON t1.mcontact = t2.mcontact AND t1.mid = t2.mid GROUP BY t1.mContact ORDER BY t1.mid DESC");
$contacts = array();
//Add data to our array
foreach($query->result() as $row){
echo $row->mNumber;
}
return $contacts;
但是,在我看来,我收到通知"消息:未定义的属性:stdClass :: $ mNumber"
所以仍然没有结果,加上我更喜欢CI查询方法.
您可以像这样在codeigniter中使用它
$query = " SELECT t1.mnumber, t1.mcontent, t1.mcontact
FROM sms t1
JOIN (
SELECT mContent,mcontact, mnumber, MAX(mID) mID
FROM sms
GROUP BY mContact
) t2 ON t1.mcontact = t2.mcontact AND t1.mid = t2.mid
GROUP BY t1.mContact
ORDER BY t1.mid DESC";
$result = $this->db->query($query);
return $result->result();
Run Code Online (Sandbox Code Playgroud)
第二种方法
您可以使用codeigniter的子查询方式为此目的执行此操作,您将不得不破解codeigniter.像这样.转到system/database/DB_active_rec.php从这些函数中删除public或protected关键字
public function _compile_select($select_override = FALSE)
public function _reset_select()
Run Code Online (Sandbox Code Playgroud)
现在子查询写入可用现在这里是您的查询与活动记录
$select = array(
'mContent',
'mcontact',
'mnumber',
'MAX(mID) mID'
);
$this->db->select($select);
$this->db->from('sms');
$this->db->group_by('mContact');
$subquery = $this->db->_compile_select(); // get the query string
$this->db->_reset_select(); // reset so it can newly form the query
unset($select);
$select = array(
't1.mnumber',
't1.mcontent',
't1.mcontact'
);
$this->db->select($select);
$this->db->join('',"($subquery)");
$this->db->from('sms t1');
$this->db->group_by('t1.mContact');
$this->db->order_by('t1.mid','DESC');
$result = $this->db->get();
return $result->result();
Run Code Online (Sandbox Code Playgroud)
事情已经完成了.干杯!!!注意:使用子查询时必须使用
$this->db->from('myTable')
Run Code Online (Sandbox Code Playgroud)
代替
$this->db->get('myTable')
Run Code Online (Sandbox Code Playgroud)
它运行查询.