sql >> Database >  >> RDS >> Mysql

Waarde vorige rij die moet worden opgehaald

Een optie hier zou zijn om een ​​self-join te doen met de payment tafel, deelnemen op de customer_id en order_id kolommen. U kunt nog een join-functieaanroep toevoegen en vervolgens het resultaat gebruiken in uw selectie. De volgende oplossing gebruikt een onbewerkte query omdat Codeigniter geen rekenkunde lijkt te tolereren in de join-voorwaarde:

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();
}

De vraag heeft de vorm:

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


  1. Hoe te repareren "Er kan slechts één uitdrukking worden opgegeven in de selectielijst ..." in SQL Server

  2. GROUP_CONCAT en INNER JOIN met WHERE-clausule

  3. Oracle 11g - PL/SQL-cursors uitvoeren

  4. codeigniter nodejs en nowjs integratie