2014-11-04 83 views
0

我想計算來自數據庫的值列表的差異。 我想用php或mysql來實現它,但我不知道如何繼續。 我有一個名爲player_scores的表。其中一行包含得分的目標。如何計算來自mysql中同一行的值之間的差異

Ex。

pl_date   pl_scores 
03/11/2014  18 
02/11/2014  15 
01/11/2014  10 

我想呼應在不同日期比賽中得分的進球之間的差異。

Ex: 
pl_date  pl_scores diff 
03/11/2014  18   +3 
02/11/2014  15   +5 
01/11/2014  10   no diff 

我該如何獲得所需的結果?

+1

我認爲你的意思是同一張表,而不是行 – 2014-11-04 13:53:26

+1

@AdamHopkinson,思維正確的+1,但有時你可以在同一個$行中有不同的值。如果是這種情況,那麼OP,你需要通過類似的東西或|來區分你的值或{},然後獲取PHP頁面中的值,計算差異會更容易。 – user3806613 2014-11-04 13:56:14

+0

@ user3806613怎麼樣? – Flosculus 2014-11-04 13:57:06

回答

0
select *, 
coalesce(
(SELECT concat(IF(t1.pl_scores>t2.pl_scores,'+',''),(t1.pl_scores-t2.pl_scores)) 
    FROM tableX t2 WHERE t2.pl_date<t1.pl_date ORDER BY t2.pl_date DESC LIMIT 1) 
, 'no data') as diff 
FROM tableX t1 
WHERE 1 
order by t1.pl_date DESC 
0

你可以使用兩個查詢,一個來獲取值的比較中使用(在下面的例子中是得分的小數目),第二個與差的專用柱,以獲得記錄:

SELECT MIN(pl_scores); 

SELECT pl_date, pl_scores, (pl_scores - minScore) as diff FROM player_scores; 

或者,使用事務(一個查詢執行PHP端):

START TRANSACTION; 

SELECT MIN(Importo) FROM Transazione INTO @min; 

SELECT Importo, (Importo - @min) as diff FROM Transazione; 
+0

嗨吉諾, 您的查詢正常工作,但我不能提取差異與PHP。我使用這個循環來回顯diff rsults:$ sql = mysql_query(「SELECT pl_scored_goal,(pl_scored_goal - @min)as diff FROM hb_games」); while($ row = mysql_fetch_array($ sql)){ echo $ row ['diff']; } – user3607990 2014-11-05 15:44:29

+0

嘗試使用$ row-> diff來訪問差異。 – matteo 2014-11-05 17:05:07

+0

嗨吉諾,我也嘗試使用$ row-> diff來回顯結果,但它不起作用。 – user3607990 2014-11-05 18:46:12

1

你似乎想對陣比分的得分比較上一個上一行。

可能最簡單的方法是使用一個子查詢來獲取最小pl_date,該最小pl_date小於當前行的pl_date,然後將該子查詢的結果返回給player_scores表以獲取每個日期的詳細信息: -

SELECT ps1.pl_date, ps1.pl_scores, IF(ps2.pl_date IS NULL OR ps1.pl_scores = ps1.pl_scores, 'no diff', ps1.pl_scores - ps1.pl_scores) AS diff 
FROM 
(
    SELECT ps1.pl_date, MAX(ps2.pl_date) prev_date 
    FROM player_scores ps1 
    LEFT OUTER JOIN player_scores ps2 
    ON ps1.pl_date > ps2.pl_date 
    GROUP BY ps1.pl_date 
) sub0 
INNER JOIN player_scores ps1 
ON sub0.pl_date = ps1.pl_date 
LEFT OUTER JOIN player_scores ps2 
ON sub0.prev_date = ps2.pl_date 

有可能其他的方法來做到這一點(例如使用變量通過一個有序的子查詢的結果工作,各行與存儲在變量上一行的值進行比較)

+0

我喜歡這個解決方案... – user3806613 2014-11-04 14:08:17

0
SELECT score FROM TABLE WHERE DATE = TheDateYouWant 

$score = $data['score']; 

SELECT score FROM TABLE WHERE date = dateYouWant 
$difference = $score - $data['score']; 

Something lik這是嗎?

相關問題