2017-08-20 30 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

啊谢谢!我忘了这个功能! :) –