按CASE ASC排序

时间:2014-07-27 11:18:55

标签: php mysql pdo case

首次在PDO(mySQL数据库)中使用CASE

我正在尝试按日期排序,但前提是日期不是毛坯(可能是)

但它似乎一起忽略了这个案子。我做错了什么?

$sql = 'SELECT * FROM mytable WHERE groupid = '.$groupid.' ORDER BY CASE WHEN groupdate != "0000-00-00" THEN groupdate END ASC';

$STH = $conn->query($sql);

if ($STH->rowCount() > 0) {

    while ($row = $STH->fetch()) {

        // output the rows

    }

} else {

    echo '<p>No dates found!</p>';

}

2 个答案:

答案 0 :(得分:2)

您想对零日期行做什么? 在其他行之后返回它们?
然后使用此查询

SELECT * 
FROM mytable 
WHERE groupid = $groupid 
ORDER BY groupdate = '0000-00-00', groupdate

groupdate ='0000-00-00'是一个布尔表达式,匹配行返回1,非匹配行返回0。 0按升序排在1之前。
非零行按groupdate排序。

答案 1 :(得分:1)

正如您在CASE documentation中所读到的那样,最后您应该有一个ELSE声明。尝试类似:

$sql = 'SELECT * FROM mytable WHERE groupid = '.$groupid.' ORDER BY (CASE WHEN groupdate != "0000-00-00" THEN groupdate ELSE groupid END)';