我正在尝试在 Code Igniter 中执行此查询:
Select
items_mtoedifsing.Marca,
items_mtoedifsing.Modelo,
items_mtoedifsing.Familia,
items_movimientos.id_item,
items_movimientos.Tipo_Movimiento,
items_movimientos.Fecha_Movimiento,
items_movimientos.Destino
from items_movimientos
JOIN items_mtoedifsing ON items_mtoedifsing.id_item=items_movimientos.id_item
where
items_movimientos.fecha_movimiento = (Select max(fecha_movimiento) from items_movimientos it where it.id_item=items_movimientos.id_item)
and items_movimientos.Destino='value'
但是我在子查询方面遇到了一些问题。这是我的代码,当它应该返回 1 行时,它返回 0 行:
$this->db->select('*');
$this->db->from('items_movimientos');
$this->db->join('items_mtoedifsing', 'items_mtoedifsing.id_item = items_movimientos.id_item');
$this->db->where('items_movimientos.Fecha_Movimiento', '(Select max(fecha_movimiento) from items_movimientos it where it.id_item=items_movimientos.id_item)');
$this->db->where('items_movimientos.Destino', $param);
我可以用这部分做什么:
$this->db->where('items_movimientos.Fecha_Movimiento', '(Select max(fecha_movimiento) from items_movimientos it where it.id_item=items_movimientos.id_item)');
使用活动记录,您可以通过将第二个参数传递为 null 并将第三个参数传递为 FALSE 来做到这一点。
$subquery="(Select max(fecha_movimiento)
from items_movimientos it
where it.id_item=items_movimientos.id_item)";
$this->db->where('items_movimientos.Fecha_Movimiento ='.$subquery, null,FALSE);
我建议您不要在 WHERE 子句中实现子查询。出于性能原因,请使用 JOIN 访问 MAX() 数据。
public function getMostRecentMovementForDestination(string $destination): ?object
{
$latestMovement = $this->db
->select('item_id, MAX(Movement_Date) max_date')
->from('items_movements')
->group_by('item_id')
->get_compiled_select();
return $this->db
->select('s.Brand, s.Model, s.Family, m.item_id, m.Movement_Type, m.Movement_Date, m.Destination')
->join('items_singles s', 's.item_id = m.item_id')
->join("($latestMovement) lm", 'm.item_id = lm.item_id AND m.Movement_Date = lm.max_date')
->where('m.Destination', $destination)
->get('items_movements m')
->row();
}
我尝试将您的表和列名称翻译成英文以帮助我理解。