两个表,表1:
newstype: tid int, typename varchar(30), lastupdate datetime
表2:
news: aid int, title varchar(50), tid现在需要 取出分类信息及其下按aid排序的最新两条news aid与title
也就是想说,我想在一条sql里取出分类信息及其下的两条news(将news信息concat起来,回头到脚本里再split拆开)我是这样做的:SELECT tid, typename, lastupdate, (SELECT GROUP_CONCAT(aid, '|#|', title SEPARATOR '|#|') FROM news_articles a2 WHERE a2.aid = ANY(SELECT a3.aid FROM (SELECT aid FROM news_articles a3 WHERE a3.typeid = t.tid ORDER BY a3.aid DESC LIMIT 2) a) GROUP BY a2.typeid) AS arts FROM news_types t ORDER BY t.lastupdate DESC LIMIT 10运行时,报错:
Error Code : 1054
Unknown column 't.tid' in 'where clause'我猜原因是tid是运行时数据,无法被深层的子查询所获取吧……
水平有限,写复杂 sql 语句写到后边就抓狂乱来了……帮帮我吧= =!
newstype: tid int, typename varchar(30), lastupdate datetime
表2:
news: aid int, title varchar(50), tid现在需要 取出分类信息及其下按aid排序的最新两条news aid与title
也就是想说,我想在一条sql里取出分类信息及其下的两条news(将news信息concat起来,回头到脚本里再split拆开)我是这样做的:SELECT tid, typename, lastupdate, (SELECT GROUP_CONCAT(aid, '|#|', title SEPARATOR '|#|') FROM news_articles a2 WHERE a2.aid = ANY(SELECT a3.aid FROM (SELECT aid FROM news_articles a3 WHERE a3.typeid = t.tid ORDER BY a3.aid DESC LIMIT 2) a) GROUP BY a2.typeid) AS arts FROM news_types t ORDER BY t.lastupdate DESC LIMIT 10运行时,报错:
Error Code : 1054
Unknown column 't.tid' in 'where clause'我猜原因是tid是运行时数据,无法被深层的子查询所获取吧……
水平有限,写复杂 sql 语句写到后边就抓狂乱来了……帮帮我吧= =!
*
FROM newstype AS A
JOIN news AS B
ON A.tid=B.tid
WHERE 2>(SELECT COUNT(*) FROM news WHERE B.tid=tid AND aid>B.aid);
不过我还是想要每个分类只有一条记录的做法,inner join的话,如果要取分类下2条新闻就会返回两条记录。
因为最终效果是这样:分类1
. 文章1
. 文章2分类2
. 文章3
. 文章4当然如果实在没办法,inner join也可以,我在脚本里具体处理掉它。
这儿一篇总结。 你可以参考一下。http://blog.csdn.net/ACMAIN_CHM/archive/2009/04/26/4126306.aspx
分组取前N记录