2012-05-16 2 views
0

У меня есть запрос MySQL, который необходимо изменить в зависимости от того, какие параметры передаются ему. Звучит просто достаточно, не так ли? Проблема в том, что если параметр равен «0», мне нужно, чтобы он захватил ВСЕ записи.MySQL/PDO: выберите разные столбцы в зависимости от параметров

Как это сделать?

Вот что у меня есть.

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 в зависимости от значения типа $, но мне было интересно, есть ли лучший способ.

ответ

2

Я хотел бы использовать nullif и ifnull функции:

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

Если :type является 0 того nullif возвращается null, и если nullif возвращает nullifnull возвращает значение из type колонки, так что если вы передаете :type = 0 результат будет type = type - означает «все строки».

+0

@ DjangoReinhardt Я изменил свой ответ, если он недостаточно ясен, дайте мне знать, я попробую объяснить. –

+0

Спасибо, я только что заметил! –

+0

Это не работает, BTW :( –

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

Это также не работает :(«Ошибка синтаксиса или нарушение прав доступа» –

+0

Тип должен быть $ типа. Это должно работать нормально. – Rawkode

+0

Вы правы, у меня теперь есть другие проблемы. –

Смежные вопросы