我有一个MySQL查询,需要根据传递给它的参数进行更改。听起来很简单吧?问题是,如果参数为'0',我需要它来获取所有记录。
我该怎么做?
这是我到目前为止所拥有的。
public function getLatestWork($numberOfSlides, $type = 0) {
$params = array();
$params["numberOfSlides"] = $numberOfSlides;
$params["type"] = $type;
$STH = $this->_db->prepare("SELECT slideID
FROM slides
WHERE visible = 'true'
AND type = :type
ORDER BY order
LIMIT :numberOfSlides;");
$STH->execute($params);
$result = $STH->fetchAll(PDO::FETCH_COLUMN);
return $result;
}
更新:$ numberOfSlides与问题无关。它将始终返回一定数量的结果。 所有关于$type
:如果它被设置为'0'(默认值),那么它基本上忽略了WHERE语句的那一部分。如果它设置为“1”或“2”等,那么它只会提取该类型的记录。
显然我可以根据$ type的值改变$ STH的值,但我想知道是否有更好的方法。
答案 0 :(得分:2)
SELECT slideID
FROM slides
WHERE visible = 'true'
AND ifnull(nullif(:type, 0), type) = type
ORDER BY "order"
LIMIT :numberOfSlides;
如果:type
为0
,则nullif
会返回null
,如果nullif
返回null
ifnull
则返回{{ {1}}列,如果您通过type
,结果将为:type = 0
- 表示“所有行”。
答案 1 :(得分:1)
public function getLatestWork($numberOfSlides, $type = 0) {
$params = array();
$params["numberOfSlides"] = $numberOfSlides;
$params["type"] = $type;
$STH = $this->_db->prepare("SELECT slideIDFROM slides WHERE visible = 'true' "
. ($type > 0 ? "AND type = :type" : "")
. " ORDER BY order LIMIT :numberOfSlides;");
$STH->execute($params);
$result = $STH->fetchAll(PDO::FETCH_COLUMN);
return $result;
}