2016-07-01 24 views
1

Ich habe 2 Tabellen:UPDATE Tabelle mit denen mehrere Zustand aus einer anderen Tabelle

Benutzer

| id | amount | 
--------------- 
| 1 | 10  | 
| 2 | 20.50 | 
| 3 | 0  | 
| 4 | 80  | 
| 5 | 0  | 
--------------- 

vehicle_travel

| id | user_id | costprice | status | 
-------------------------------------- 
| 1 | 1  | 80.00  | active | 
| 2 | 1  | 20.00  | expired | 
| 3 | 2  | 130.50 | active | 
| 4 | 5  | 325.00 | active | 
| 5 | 3  | 99.50  | expired | 
-------------------------------------- 

Ich möchte UPDATEBenutzer Tabelle und SETusers.amount zu users.amount + vehicle_travel.costpriceWHERE die users.id gleich zu vehicle_travel.user_idANDvehicle_travel.status gleich zu 'abgelaufen'

Das ist mein voll ist query:

UPDATE users 
SET users.amount=users.amount+vehicle_travel.costprice 
WHERE users.id=vehicle_travel.user_id 
AND vehicle_travel.status='expired' 

Aber ich halte unbekannte Spalte erro bekommen rs von phpMyAdmin.

Was mache ich falsch?

+0

Bitte geben Sie die genaue Fehlermeldungen – Nikem

+0

Notwendigkeit 'join' – 1000111

+1

zu verwenden, um es hängt davon ab, wie viele abgelaufen Sie pro Benutzer-ID haben könnte. Also, diese Info steuert, ob die Antworten unten funktionieren werden. – Drew

Antwort

1

Try this;)

UPDATE users 
INNER JOIN vehicle_travel 
ON users.id = vehicle_travel.user_id 
AND vehicle_travel.status = 'expired' 
SET users.amount = users.amount + vehicle_travel.costprice 

EDITED:

UPDATE users 
INNER JOIN (
    SELECT SUM(costprice) AS costprice, user_id 
    FROM vehicle_travel 
    WHERE status = 'expired' 
    GROUP BY user_id 
) vehicle_travel 
ON users.id = vehicle_travel.user_id 
SET users.amount = users.amount + vehicle_travel.costprice 
+0

Es funktioniert jetzt, aber wenn es 2 oder mehr vehicle_travel mit dem Status 'abgelaufen' gibt, fügt es nur den ersten vehicle_travel.costprice zum user.mount hinzu, aber nicht zum zweiten. Wie kann ich das erreichen? –

+0

@ JeremyJohn Für diesen Fall benötigen Sie eine Unterabfrage zu 'sum (costprice)', überprüfen Sie bitte die *** Edited *** Antwort. – Blank

+0

Ich sehe, es funktioniert jetzt perfekt. Vielen Dank –

1

Sie müssen JOIN verwenden. Wenn Sie den Tabellennamen nicht angeben, wird unbekannter Spaltenfehler für die Spalten auftreten, die sich auf die nicht angegebene Tabelle beziehen.

UPDATE users 
INNER JOIN vehicle_travel ON vehicle_travel.user_id = users.id 
SET users.amount=users.amount+vehicle_travel.costprice 
WHERE vehicle_travel.status='expired' 
Verwandte Themen