Вы можете попробовать эту структуру таблицы и запрос для вашей проблемы:
выберите * из компании;
выберите * из 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
Надеюсь, это поможет