这是我的问题:
( SELECT id, table_code, seen, date_time FROM events
WHERE author_id = ? AND seen IS NULL
) UNION
( SELECT id, table_code, seen, date_time FROM events
WHERE author_id = ? AND seen IS NOT NULL
LIMIT 2
) UNION
( SELECT id, table_code, seen, date_time FROM events
WHERE author_id = ?
ORDER BY (seen IS NULL) desc, date_time desc -- inner ORDER BY
LIMIT 15
)
ORDER BY (seen IS NULL) desc, date_time desc; -- outer ORDER BY
如您所见,有一个外部ORDER BY
,其中一个子查询也有自己的ORDER BY
。我相信子查询中的ORDER BY
是无用的,因为最终结果将按外部结果排序。我对吗?或者内部ORDER BY
对排序有什么影响?
另外我关于上述查询的第二个问题:实际上我只需要id
和table_code
。我已选择seen
和date_time
仅用于外ORDER BY
,我可以做得更好吗?
答案 0 :(得分:2)
如果查询中有var inputElement = document.getElementById("input_message");
inputElement.focus();
inputElement.addEventListener("blur", function(event){
inputElement.focus();
});
,则需要内部order by
。因此,第三个子查询根据顺序选择15行。
一般情况下,当您拥有limit
时,您应该使用limit
。如果您正在学习数据库,则尤其如此。你可能似乎得到了正确的答案 - 然后当它在稍后的某个时间点不起作用时会非常惊讶。仅仅因为某些东西似乎有用并不意味着它可以保证有效。
外部顺序只是对子查询返回的所有行进行排序。