两个表,表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 语句写到后边就抓狂乱来了……帮帮我吧= =!

解决方案 »

  1.   

    SELECT
        *
    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);
      

  2.   

    谢谢楼上,我晚上跑一下看看。现在实在要下班闪人……
    不过我还是想要每个分类只有一条记录的做法,inner join的话,如果要取分类下2条新闻就会返回两条记录。
    因为最终效果是这样:分类1
     . 文章1
     . 文章2分类2
     . 文章3
     . 文章4当然如果实在没办法,inner join也可以,我在脚本里具体处理掉它。
      

  3.   

    用一楼的方法应该就可以了。最近好象类似的问题很多。
    这儿一篇总结。 你可以参考一下。http://blog.csdn.net/ACMAIN_CHM/archive/2009/04/26/4126306.aspx
    分组取前N记录