2017-08-20 34 views
1

我有我的PHP腳本以下查詢:MySQL的預防和兩次

SELECT SUM(score) + 1200 AS rating 
FROM users_ratings 
WHERE user_fk = ? 

的問題是,如果用戶在表中沒有行,評級返回爲NULL。所以我增加了一個,如果情況:

SELECT IF(SUM(score) IS NULL, 0, SUM(score)) + 1200 AS rating 
FROM users_ratings 
WHERE user_fk = ? 

但現在我不知道該怎麼辦查詢,而無需重複SUM(score)。我猜如果我有很多行,總和會重複兩次,這會影響應用程序的性能。

回答

2

下面是一個簡單的方法:

SELECT (COALESCE(SUM(score), 0) + 1200) AS rating 
FROM users_ratings 
WHERE user_fk = ?; 

COALESCE()是ANSI標準的函數,返回從表達式列表的第一非NULL值。

但是,計算SUM(score)兩次的額外開銷 - 即使發生 - 與查詢的其餘部分(查找數據,讀入數據並將其總結爲一行)相比應該非常小。

+0

啊謝謝!我忘了這個功能! :) –