首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL/PDO:根据参数选择不同的列

问MySQL/PDO:根据参数选择不同的列
EN

Stack Overflow用户
提问于 2012-05-16 10:14:35
回答 2查看 195关注 0票数 0

我有一个MySQL查询,需要根据传递给它的参数进行更改。听起来很简单,对吧?问题是,如果参数是'0‘,我需要它来获取所有记录。

我该怎么做?

到目前为止我的情况是这样的。

代码语言:javascript
复制
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;        
}

Update:$numberOfSlides与问题无关。它将始终返回一定数量的结果。这都是关于$type__的:如果它被设置为'0‘(默认值),那么它实际上忽略了WHERE语句的这一部分。如果它被设置为'1‘或'2’等等,那么它只会提取该类型的记录。

显然,我可以根据$STH的值更改$type的值,但我想知道是否有更好的方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-16 10:18:15

我将使用nullif和ifnull函数:

代码语言:javascript
复制
SELECT slideID 
FROM slides
WHERE visible = 'true'
    AND ifnull(nullif(:type, 0), type) = type
ORDER BY "order"
LIMIT :numberOfSlides;

如果:type是0,那么nullif返回null,如果nullif从type列返回null ifnull,那么如果传递:type = 0,结果将是type = type --意思是“所有行”。

票数 2
EN

Stack Overflow用户

发布于 2012-05-16 10:56:17

代码语言:javascript
复制
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;        
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10616458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档