MySQL中的Case表达式和Case语句有什么区别?什么时候可以使用它们,使用一个优于另一个有什么好处?
案例陈述语法:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Run Code Online (Sandbox Code Playgroud)
案例表达式语法:
CASE
WHEN [condition] THEN result
[WHEN [condition] THEN result ...]
[ELSE result]
END
Run Code Online (Sandbox Code Playgroud)
这些看起来几乎相同,但案例陈述的初始描述是这样的 The CASE statement for stored programs implements a complex conditional construct.
那么在存储程序中使用一个并且在普通查询中不可用的重要区别是什么?我在我正在玩的查询中尝试了这个,但它失败了 - sqlfiddle.如果是这种情况,为什么不在存储的程序中使用Case Expression?
还有其他任何语法差异需要注意,因为它们看起来完全相同吗?
我在另一个问题上看到了这个代码 - 第二个答案链接,第一个评论是它是一个静态工厂反模式,它违反了SRP:
class User {
public static function create($userid) {
// get user from the database
// set $isPartner to true or false
// set $isClient to true or false
// set $isModerator to true or false
if ($isPartner) {
return new Partner($userid);
} elseif ($isClient) {
return new Client($userid);
} elseif ($isModerator) {
return new Moderator($userid);
} else {
return new User($userid);
}
}
}
$person = User::create($userid);
Run Code Online (Sandbox Code Playgroud)
现在我可以理解为什么它违反了SRP - 因为它处理连接到数据库以及构建新类,但除此之外我不确定我是否理解为什么它是反模式.
我想编写一些与此类似的代码,所以我现在想知道是否要避免它,这是我的代码(伪代码):
class DatabaseClass()
{
...deals …Run Code Online (Sandbox Code Playgroud)