解决sqlite中union的子句不能使用order by和limit问题

有一种场景,我们需要在同一张表中找出几个分类的文章,并且按照时间排序,通常我们会这样写(假设表名称是post):

SELECT * FROM post WHERE category_id=1 ORDER BY create_time DESC LIMIT 10

如果有多个分类,我们会考虑将几个语句使用union all连接

SELECT * FROM post WHERE category_id=1 ORDER BY create_time DESC LIMIT 10
UNION ALL
SELECT * FROM post WHERE category_id=2 ORDER BY create_time DESC LIMIT 10

但是这个语句在sqlite是行不通的,sqllite的order和limit不能在union子句执行,这个时候可以使用子查询实现,比如:

SELECT * FROM (SELECT * FROM post WHERE category_id=1 ORDER BY create_time DESC LIMIT 10)
UNION ALL
SELECT * FROM (SELECT * FROM post WHERE category_id=1 ORDER BY create_time DESC LIMIT 10)

你可能还喜欢下面这些文章

使用expect之后无法使用rz和sz的解决方法

在机器太多的时候,我们会使用expect来自动化登录,然而使用expect之后就不能使用rz和sz了。经过一番寻找之后,发现有一个解决方案,在脚本之前增加一个export LC_CTYPE=en_US注意,这个语句放到登录脚本里面就可以了,不要放到.bash_profile里面,如果放到bash_profile里面可能你当前的终端语言都变了,中文可能会乱码。这个缺点是远程机器里面的中文可能会乱码了,如果有更好的解决方案,我会在这里更新。

ubuntu安装libpng-dev失败,libpng12-dev : Depends: libpng12-0 (= 1.2.50-1ubuntu2.14.04.3) but 1.2.50-2+deb8u3 is to be installed

依赖问题,需要先安装libpngapt install libpng12-0=1.2.54-1ubuntu1问题解决。

休眠后mac点击wifi图标卡死的解决方法

最近遇到一些问题,休眠后的mac点击wifi图标导致整个顶部的导航栏全部卡死,十分崩溃。最开始分析是导航栏的问题,想着重启一下导航栏。killall SystemUIServer然而并不管用,导航栏是不卡死了,但是点击wifi图标依旧会卡死。那就重启一下网络吧。ps -ef | grep airportd然后sudo kill 掉就可以了。不过mac还有一个比较简单的killall命令sudo killall airportd