2017-04-05 71 views
0

這段時間我可能試圖達到太高,但我希望可以這樣做。我有一個名爲西甲這樣的表:如果其他表格中的值相同,則更新一個表格

uid | name | games | points | 
___________________________________ 
1 | Daniel | 0 | 0  | 
2 | Mikkel | 0 | 0  | 

UID是短期的用戶ID。 然後我有一個名爲kamp2這樣的表:

uid | k1 | k1r | k2 | k2r | week | 
__________________________________________________ 
1 | 1  | 2-1 | X | 2-2 | 14 | 
2 | 2  | 1-1 | 1 | 2-1 | 14 | 

這些數據是由用戶(附接到UID)提交。
現在,我想是一個形式,在這裏我寫soccermatch的結果,是這樣的:

<input type="text" name="k1">... and so on... 

...然後我應該寫正確的結果。所以,對於我的實際問題:
假設第一場比賽(k1 =獲勝者(1X2)和k1r =結果)爲2-1,我希望表格更新liga -table,如下所示:

If (k1 == 1 AND k1r == 2-1) UPDATE liga SET point = point + 5 WHERE uid = $uid; 
else if 
(k1r == 2-1 AND k1 != 1) UPDATE liga SET point = point + 3 WHERE uid = $uid ; 
else if 
(k1 == 1 AND k1r != 2-1) UPDATE liga SET point = point + 1 WHERE uid = $uid ; 

但這怎麼可能?我應該先選擇kamp2表,然後用它或者JOIN這兩個表怎麼樣? 如果這個問題太「大」回答,只是讓我知道:)我不希望你給我的確切代碼,只是爲了引導我:) 希望它沒關係!

回答

2

你可以加入表一起,然後做更新CASE邏輯:

UPDATE liga l JOIN 
     kamp2 k 
     ON l.uid = k.uid 
    SET point = (CASE WHEN k.k1 = '1' and k.k1r = '2-1' THEN point + 5 
         WHEN k.k1r = '2-1' AND k.k1 <> '1' THEN point + 3 
         WHEN k.k1 = '1' AND k.k1r <> '2-1' THEN point + 1 
         ELSE point 
       END) 
    WHERE l.uid = $uid ; 
+0

我一回家就試試這個:) –

+0

我該如何確定,它在** kamp2 **表中選擇了本週?下週本週的專欄將是15,所以我必須確定,它使用了那個星期的情況? –

+1

@DanielJensen。 。 。如果您有其他問題,請將其作爲新的*問題*,而不是發表評論。 –

0

您無法更新條件相同的記錄。

您需要使用子查詢來更新它。

UPDATE data_table噸,(SELECT DISTINCT ID,名稱,值 FROM data_table WHERE值不是NULL AND VALUE!= '')T1 SET t.VALUE = t1.VALUE WHERE t.ID = t1時。 ID和t.NAME = t1.NAME

0

您可以使用觸發器的概念來實現這一任務:

https://www.sitepoint.com/how-to-create-mysql-triggers/

你必須創建更新/插入後觸發器的在kamp2表,並在觸發你會更新西甲

要不然處理這個由後端PHP腳本。

+0

爲什麼我們不能用加入更新詢問?我們可以通過加入和案例陳述來解決這個問題 – Krishnakumar

+0

是的,@Gordon Linoff使用連接和案例給出了很好的解決方案,,, – Krishnakumar

+0

對不起,我的壞編輯答案,以避免任何錯誤的信息。 –

相關問題