jeudi 16 juin 2016

Can you use php with an SQL case?

I am trying to optimize some of my code and i believe i need an if/else or case to do this, however I think i would need php in the query to get it to work

here is the code I am trying to optimize

        $sql = "SELECT value, COUNT(*) AS count
        FROM sodsurvey LEFT OUTER JOIN age
        ON sodsurvey.age_id = age.id 
        WHERE value IS NOT NULL AND office_id = " . $office_id . "
        GROUP BY age_id; ";

    if ($_SESSION['filteryear'] != 0 && $_SESSION['filtermonth'] != 0) {
        $sql = "SELECT value, COUNT(*) AS count
        FROM sodsurvey LEFT OUTER JOIN age
        ON sodsurvey.age_id = age.id 
        WHERE value IS NOT NULL AND office_id = " . $office_id . "
        AND year = " . $_SESSION['filteryear'] . " AND month = " . $_SESSION['filtermonth'] . "
        GROUP BY age_id; ";
    } else if ($_SESSION['filteryear'] != 0 || $_SESSION['filtermonth'] != 0) {
        $sql = "SELECT value, COUNT(*) AS count
        FROM sodsurvey LEFT OUTER JOIN age
        ON sodsurvey.age_id = age.id 
        WHERE value IS NOT NULL AND office_id = " . $office_id . "
        AND (year = " . $_SESSION['filteryear'] . " OR month = " . $_SESSION['filtermonth'] . ")
        GROUP BY age_id; ";
    }

and this is what I have tried to give you a rough idea of what I am trying to achieve

    $filter = "";

    if ($_SESSION['filteryear'] != 0 && $_SESSION['filtermonth'] != 0) {
        $filter = "AND year = " . $_SESSION['filteryear'] . " AND month = " . $_SESSION['filtermonth'] . ""
    } else if ($_SESSION['filteryear'] != 0 || $_SESSION['filtermonth'] != 0) {
        $filter = "AND (year = " . $_SESSION['filteryear'] . " OR month = " . $_SESSION['filtermonth'] . ")"
    }

    $sql = "SELECT value, COUNT(*) AS count
    FROM sodsurvey LEFT OUTER JOIN age
    ON sodsurvey.age_id = age.id 
    WHERE value IS NOT NULL AND office_id = " . $office_id . "
    CASE 
        WHEN ".isset($filter)." THEN ". $filter ."
    END
    GROUP BY age_id; ";

Aucun commentaire:

Enregistrer un commentaire