首次在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>';
}
答案 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)';