Mysql
 sql >> Base de données >  >> RDS >> Mysql

Valeur de ligne précédente à récupérer

Une option ici serait de faire une auto-jointure avec le payment table, jointure sur le customer_id et order_id Colonnes. Vous pouvez ajouter un autre appel de fonction de jointure, puis utiliser le résultat dans votre sélection. La solution suivante utilise une requête brute car Codeigniter ne semble pas tolérer l'arithmétique dans la condition de jointure :

public function order_balance($order_code)
{
    $this->db->query("SELECT p1.*, p2.balance AS previous_balance FROM payment p1 INNER JOIN payment p2 ON p1.order_id = p2.order_id + 1 AND p1.customer_id = p2.customer_id LEFT JOIN services s ON p1.customer_id = s.customer_id ORDER BY p1.id DESC");
    $query = $this->db->get_where('p1', array('code' => $order_code));
    return $query->previous_row();
}

La requête a la forme :

SELECT p1.*, p2.balance AS previous_balance
FROM payment p1 INNER JOIN payment p2
    ON p1.order_id = p2.order_id + 1 AND
       p1.customer_id = p2.customer_id
LEFT JOIN services s
    ON p1.customer_id = s.customer_id
ORDER BY p1.id DESC