我有一张这样的表:
// Names
+----+--------+------------+
| id | name | visibility |
+----+--------+------------+
| 1 | Alex | 1 |
| 2 | Jack | 0 |
| 3 | Peter | 1 |
+----+--------+------------+
我想选择name
,但我需要在选择之前检查其visibility
。换句话说,如果可见性为1
,我希望它返回名称,如果可见性为null
,则返回0
。我怎么能在查询中做到这一点?
SELECT (check visibility here) AS name FROM Names WHERE id = :id;
我可以通过PHP这样做:
if ($result['visibility'] == 1) {
$name = $result['name'];
} else {
$name = null;
}
但我想通过pure-sql来做到这一点。
答案 0 :(得分:4)
您可以使用CASE
声明:
Select Case When Visibility = 1 Then Name Else Null End As Name
From Names
Where Id = :id;
答案 1 :(得分:4)
您可以使用if
,它相当于MySQL中的case
表达式。
SELECT if(visibility=1,name,null) name FROM Names WHERE id = :id
答案 2 :(得分:2)
简单的
是错的SELECT name FROM Names WHERE id = :id AND visibility = 1;
你只需要对你的结果处理进行编码,以期望没有返回任何行,并告诉你这个人不应该是可见的,而且更多的不会返回任何有关它们的信息
答案 3 :(得分:1)
我发表评论时使用IF
条件。
SELECT IF(visibility=1, name, NULL) AS name FROM Names WHERE id = :id;