Cómo unirse a la mesa con tabla de árboles por una de las tablas especificadas donde condición
A tiene dos tablas que quiero unirme a la mesa para obtener resultados, por favor mire este SQL funcionando bien.
function getTotalCheque_per_day($date)
{
$this->db->select_sum('(osp.`payment_amount`)', 'payment' );
$this->db->from("ospos_sales_payments as osp");
$this->db->join("ospos_sales os", "os.sale_id = osp.sale_id", "inner");
$this->db->join("ospos_sales_items i", "os.sale_id = osp.sale_id","INNER");
$this->db->where('osp.payment_type', 'Cheque');
$this->db->where('os.sale_status', 0);
$this->db->like('osp.payment_time', $date);
$this->db->group_by('i.sale_id');
return $this->db->get()->row('payment');
}
Desde arriba me uno a la mesa para conseguir que el resultado funciona bien, el problema que quiero unirme a otra tabla para que pueda añadir la ubicación de stock id, pero donde me uno a ella devuelve los resultados incorrectos debido a esta tabla tienen la relación de múltiples ids.
function getTotalCheque_per_dayGeneral($date,$stock_location)
{
$this->db->select_sum('(osp.`payment_amount`)', 'payment' );
$this->db->from("ospos_sales_payments as osp");
$this->db->join("ospos_sales os", "os.sale_id = osp.sale_id", "inner");
$this->db->join("ospos_sales_items i", "os.sale_id = osp.sale_id","INNER");
$this->db->where('osp.payment_type', 'Cheque');
$this->db->where('os.sale_status', 0);
$this->db->where('i.item_location = ', $stock_location);
$this->db->like('osp.payment_time', $date);
$this->db->group_by('i.sale_id');
return $this->db->get()->row('payment');
//print_r($this->db->last_query());
}
En resumen trato de obtener la cantidad de pago por fecha de filtro y ubicación de stock en tipo de pago tarjeta de crédito
Pregunta hecha hace 3 años, 4 meses, 12 días - Por byteninja8245
2 Respuestas:
-
El problema que estás experimentando en tu segundo método
getTotalCheque_per_dayGeneral
se debe a cómo estás realizando la unión de tablas. Para poder obtener la ubicación de stock id además de los otros datos que necesitas, debes ajustar la forma en que se está realizando la unión de tablas en tu consulta SQL.Aquí tienes una posible solución para unir la tabla
ospos_sales_items
y obtner ellocation_id
:php function getTotalCheque_per_dayGeneral($date, $stock_location) { $this->db->select_sum('(osp.`payment_amount`)', 'payment'); $this->db->from("ospos_sales_payments as osp"); $this->db->join("ospos_sales os", "os.sale_id = osp.sale_id", "inner"); $this->db->join("ospos_sales_items i", "i.sale_id = os.sale_id", "inner"); $this->db->where('osp.payment_type', 'Cheque'); $this->db->where('os.sale_status', 0); $this->db->where('i.item_location', $stock_location); $this->db->like('osp.payment_time', $date); $this->db->group_by('i.sale_id'); return $this->db->get()->row('payment'); }
Al hacer este ajuste en la unión de tablas, ahora estarás relacionando la tabla
ospos_sales_items
con la tablaospos_sales
correctamente, lo que debería darte los resultados esperados al filtrar por la ubicación de stock id.Por favor inténtalo y vuelve a ejecutar tu consulta para ver si obtienes los resultados correctos esta vez.
Respondida el Dec 20, 2020 a las 06:46 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para unirte a la tabla
ospos_sales_items
con la tablaospos_stock_locations
basada enitem_location
, puedes utilizar la siguiente consulta:``
sql SELECT osp.
paymentamountFROM
ospossalespaymentsAS osp JOIN
ospossalesAS os ON os.
saleid= osp.
saleidJOIN
ospossalesitemsAS i ON os.
saleid= i.
saleidJOIN
osposstocklocationsAS sl ON i.
itemlocation= sl.
locationidWHERE osp.
paymenttype= 'Cheque' AND os.
salestatus= 0 AND sl.
locationid= ? AND osp.
paymenttimeLIKE ? GROUP BY i.
sale_id`
phpEn tu función PHP actualizada, el código quedaría así:
function getTotalChequeperdayGeneral($date, $stocklocation) { $this->db->selectsum('(osp.
payment_amount
)', 'payment'); $this->db->from("ospossalespayments as osp"); $this->db->join("ospossales os", "os.saleid = osp.saleid", "inner"); $this->db->join("ospossalesitems i", "os.saleid = osp.saleid", "INNER"); $this->db->join("osposstocklocations sl", "i.itemlocation = sl.locationid", "INNER"); $this->db->where('osp.paymenttype', 'Cheque'); $this->db->where('os.salestatus', 0); $this->db->where('sl.locationid', $stocklocation); $this->db->like('osp.paymenttime', $date); $this->db->groupby('i.saleid'); return $this->db->get()->row('payment'); } ```Esto debería unir correctamente las tablas y devolver los resultados correctos.
Respondida el Dec 20, 2020 a las 06:50 - por Gemini
Votos positivos: 0 | Votos negativos: 0