你可以试试这个表结构并查询你的问题:
从公司中选择 *;
从 company_rating 中选择 *;
SELECT company.id, company.company_name, MAX(company_rating.rating)
FROM company
RIGHT JOIN company_rating ON company_rating.company_id = company.id
GROUP BY company.id
ORDER BY MAX(company_rating.rating) DESC
你可以试试 CI Active Query 吗:
$this->db->select('company.id, company.company_name, MAX(company_rating.rating)', false);
$this->db->from('company');
$this->db->join('company_rating c', 'company_rating.company_id = company.id', 'right');
$this->db->group_by('company.id');
$this->db->order_by('MAX(company_rating.rating)', 'desc');
$query = $this->db->get();
return $query->row();
并修改您的表结构,如
CREATE TABLE `company` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`company_name`varchar(30),
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `company` (`company_name`) VALUES
('ABC'),
('XYZ');
CREATE TABLE `company_rating` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`company_id` int(11),
`rating` int(11),
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
INSERT INTO `company_rating` (`company_id`,`rating`) VALUES
(1,2),
(1,4),
(1,5),
(2,4),
(2,7),
(2,10);
也可以访问http://sqlfiddle.com
输出喜欢:
id company_name rating
1 ABC 5
2 XYZ 10
希望对你有帮助