2010-11-04 91 views
1

Hy everyone, 長時間閱讀器,第一次張貼海報。MySQL根據其原始值更改值

這聽起來像應該很簡單,但我無法在任何地方找到解決方案。我正在建立一個評級系統,人們可以評估某些事情是否有效。它有自己的小邏輯,但它需要我的工作。

  1. 檢查項目依賴它的額定電流變化到預置量排行榜

我可以使用兩條SQL語句在PHP中對其進行硬編碼,但我確定使用單個存儲過程(一個用於投票,另一個用於投票)將快得多。

示例表:

item_id | item_rating 
--------------------- 
    10 | 1 

邏輯投票item_rating起來:

if | then 
--------- 
0 | 1 
1 | 2 
-1 | 1 
-2 | 1 
2 | 2 

邏輯投票item_rating下來:

if | then 
--------- 
0 | -1 
1 | -1 
-1 | -2 
-2 | -2 
2 | -1 

我知道基礎的系統的簡單點,會更容易但由於系統的性質,這是我能找到的最簡單的解決方案。

有人可以解釋我將如何在SQL中使用IF語句來實現此目的嗎?我相信答案對知道的人來說真的很明顯。

(順便說一句使用的是最新版本的MySQL)

+0

我沒有看到你在做什麼邏輯。多少票獲得評分? – theazureshadow 2010-11-04 03:31:47

+0

2處於活動狀態,-2處於非活動狀態,0未評級。 1和-1是不知道的。這個想法是兩個人必須連續投票才能使其有效。 – Robert 2010-11-04 03:36:27

+0

如果2處於激活狀態,則連續兩次投票將激活,但只有一次投票將使其失效。您可能需要考慮定義1和-1行爲的邏輯。 – davur 2010-11-04 03:49:29

回答

3

這是您要尋找的?下面是一個給予好評:

UPDATE rating 
SET item_rating = IF(item_rating < 1, 1, 2); 

這裏有一個downvote:

UPDATE rating 
SET item_rating = IF(item_rating > -1, -1, -2); 
+0

謝謝。最後必須使用嵌套的If語句。不漂亮,但它的作品。感謝你的回答!只是花了我4個小時的時間把我的頭髮撕掉了。我的代碼是什麼 – Robert 2010-11-04 04:21:03

+0

UPDATE item SET rating = IF(rating = 1,2,IF(rating = 0,1,IF(rating = -1,1,IF(rating = -2,1,2) ))) WHERE id = 10; – Robert 2010-11-04 04:21:55

+0

對不起。趕上了你的第一篇文章。這是FAR更優雅的解決方案!如果我擁有一個,我會把我的帽子給你。 – Robert 2010-11-04 04:31:56

0

這是未經測試,但我認爲它應該工作。

update items i 
set item_rating = (select i.item_rating + `then` from item_rating 
        where `if` = i.item_rating) 
where i.item_id = 10 
+0

這是爲了贊成票。對於倒票,你可以使用'-'而不是'+'。 – jordanbtucker 2010-11-04 03:41:42