2016-08-01 11 views
0

Ich habe eine Tabelle tbl_loyaltypoints in dieser Tabelle eine Spalte status = 2 hat StandardwertWie werden Datensätze basierend auf dem Zustand aktualisiert?

Jetzt habe ich folgende Abfrage alle Datensätze

select lp.order_id, DATEDIFF(CURDATE(), FROM_UNIXTIME(lp.created_at)) as createon, 
     oi.deal_id, wo.returnWithin, lp.status 
from tbl_loyaltypoints lp 
inner join tbl_orders ord on lp.order_id = ord.id 
inner join tbl_order_item oi on lp.order_id = oi.order_id 
inner join tbl_workorders wo on oi.deal_id = wo.id 
where ord.order_type = 1 
order by lp.id DESC; 

Ausgabe zu erhalten:

order_id createon deal_id returnWithin status 
1045  4   160  20   2 
1044  4   160  20   2 
1043  20   160  20   2 

I Status aktualisieren möchten tbl_loyaltypoints.status wenn createon==returnWithin.

Gibt es eine Möglichkeit, dies mit Mysql zu tun?

Antwort

1

können Sie verwandeln die select in ein join:

update tbl_loyaltypoints lp inner join 
     tbl_orders ord 
     on lp.order_id = ord.id inner join 
     tbl_order_item oi 
     on lp.order_id = oi.order_id inner join 
     tbl_workorders wo 
     on oi.deal_id = wo.id 
    set lp.status = ?? 
where ord.order_type = 1 and 
     DATEDIFF(CURDATE(), FROM_UNIXTIME(lp.created_at)) = wo.returnWithin; 

Sie geben nicht, was der neue Status ist. Die ?? ist ein Platzhalter.

+0

Der neue Status wird Status = 1 sein – Arunendra

+0

Danke Es funktioniert – Arunendra

Verwandte Themen