0

渡されるパラメータに応じて変更する必要がある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の値を変更することもできますが、もっと良い方法があるかどうか疑問に思いました。

4

2 に答える 2

2

私は使用nullifし、ifnull機能します:

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

の場合:type0nullif返しnull、戻りの場合は列から値を返すnullifため、渡す と結果は-「すべての行」を意味します。null ifnulltype:type = 0type = type

于 2012-05-16T10:18:15.193 に答える
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;        
}
于 2012-05-16T10:56:17.703 に答える