MySQL的
SELECT * FROM media
LEFT JOIN media_priority
ON (media_priority.media_id = media.id AND media_priority.media_tag = '".$tag."')
WHERE something = 'something'
ORDER BY media_priority.media_order;
这很好用,除了media_priority.media_order有时会返回null并且mysql将空值放在顶部。
所以我试图弄清楚如何用我的左连接做一个IS NULL AS tempcol语句,所以我可以先按顺序排序......我似乎无法正确使用语法。
我在上面的查询中将IS NULL语句放在哪里?
我在想这样的事情:
LEFT JOIN media_priority
ON (media_priority.media_id = media.id AND media_priority.media_tag = '".$tag."')
media_priority.media_order IS NULL AS isnull
但这不起作用。
答案 0 :(得分:11)
ORDER BY
CASE WHEN media_priority.media_order IS NULL THEN 1 ELSE 0 END,
media_priority.media_order;
如果您有一个media_order
永远无法达到的上限,请使用幻数。
ORDER BY
COALESCE( media_priority.media_order,99999999);
第一种方法显然更安全一些!
答案 1 :(得分:11)
我建议首先按照media_priority.media_order IS NULL
的布尔值排序,然后按列值排序,以强制NULL结束。
像这样:
SELECT * FROM media
LEFT JOIN media_priority
ON (media_priority.media_id = media.id AND media_priority.media_tag = '".$tag."')
WHERE something = 'something'
ORDER BY (media_priority.media_order IS NULL) ASC, media_priority.media_order ASC;