Попробуйте это
$this->db->select('b1.Invoice_No, cust_name, cust_address, cust_contact, Item_name, Item_qty, Item_amount');
$this->db->from(' tbl_bill_invoice as b1');
$this->db->join('tbl_billmenu as b2', 'b2.Invoice_No = b1.Invoice_No', 'inner');
$this->db->join('tbl_billcustomer as b3', 'b3.cust_id = b1.cust_id', 'inner');
$this->db->where('b1.Invoice_no', 13);
return $this->db->get()->row();
Это, вероятно, не поможет, если таблица уже будет работать, но правильный способ смоделировать, это должно сделать версию = 0 постоянная версия и всегда увеличивать версию БОЛЕЕ СТАРОГО материала. Таким образом, при вставке новой версии, Вы сказали бы:
UPDATE thetable SET version = version + 1 WHERE id = :id
INSERT INTO thetable (id, version, title, ...) VALUES (:id, 0, :title, ...)
Затем этот запрос просто был бы
SELECT id, title, ... FROM thetable WHERE version = 0
Никакие подзапросы, никакое МАКС. агрегирование. Вы всегда знаете, какова текущая версия. Вы никогда не должны выбирать макс. (версия) для вставки новой записи.
Возможно, что-то вроде этого?
SELECT
t2.id,
t2.title,
t2.contenttext,
t2.fk_idothertable,
t2.version
FROM mytable t1, mytable t2
WHERE t1.fk_idothertable == t2.fk_idothertable
GROUP BY t2.fk_idothertable, t2.version
HAVING t2.version=MAX(t1.version)
Просто произвольное предположение...
Вы Смогли делать МАКСА псевдонимом таблицы, который действительно группируется.
Это могло бы выглядеть примерно так:
SELECT
t1.id,
t1.title,
t1.contenttext,
t1.fk_idothertable
t1.version
FROM mytable as t1 JOIN
(SELECT fk_idothertable, MAX(version) AS topversion
FROM mytable
GROUP BY fk_idothertable) as t2
ON t1.version = t2.topversion
Я думаю, что FerranB был близок, но не вполне имел группирующегося права:
with
latest_versions as (
select
max(version) as latest_version,
fk_idothertable
from
mytable
group by
fk_idothertable
)
select
t1.id,
t1.title,
t1.contenttext,
t1.fk_idothertable,
t1.version
from
mytable as t1
join latest_versions on (t1.version = latest_versions.latest_version
and t1.fk_idothertable = latest_versions.fk_idothertable);
M
Я не знаю, насколько эффективный это было бы, но:
SELECT t1.*, t2.version FROM mytable AS t1 JOIN ( SElECT mytable.fk_idothertable, MAX(mytable.version) AS version FROM mytable ) t2 ON t1.fk_idothertable = t2.fk_idothertable
Как это... Я предполагаю, что 'mytable' в подзапросе была другая фактическая таблица..., таким образом, я назвал его mytable2. Если это была та же таблица затем, это будет все еще работать, но затем я предполагаю, что fk_idothertable просто будет 'идентификатором'.
SELECT
t1.id,
t1.title,
t1.contenttext,
t1.fk_idothertable
t1.version
FROM mytable as t1
INNER JOIN (SELECT MAX(Version) AS topversion,fk_idothertable FROM mytable2 GROUP BY fk_idothertable) t2
ON t1.id = t2.fk_idothertable AND t1.version = t2.topversion
Надеюсь, это поможет