簡體   English   中英

MySQL / PDO:根據參數選擇不同的列

[英]MySQL/PDO: Select different columns depending on parameters

我有一個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的值,但是我想知道是否有更好的方法。

我將使用nullififnull函數:

SELECT slideID 
FROM slides
WHERE visible = 'true'
    AND ifnull(nullif(:type, 0), type) = type
ORDER BY "order"
LIMIT :numberOfSlides;

如果:type0nullif返回null ,如果nullif返回null ,則nullif返回type列的值,因此,如果傳遞:type = 0則結果將為type = type ifnull表示“所有行”。

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;        
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM