请教一条sql语句

woooooooow 2009-04-29 06:39:41
两个表,表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 语句写到后边就抓狂乱来了……帮帮我吧= =!
...全文
68 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
woooooooow 2009-04-29
  • 打赏
  • 举报
回复
多谢二位。明天在项目里用一下看看……
ACMAIN_CHM 2009-04-29
  • 打赏
  • 举报
回复

用一楼的方法应该就可以了。

最近好象类似的问题很多。
这儿一篇总结。 你可以参考一下。

http://blog.csdn.net/ACMAIN_CHM/archive/2009/04/26/4126306.aspx
分组取前N记录

woooooooow 2009-04-29
  • 打赏
  • 举报
回复
谢谢楼上,我晚上跑一下看看。现在实在要下班闪人……
不过我还是想要每个分类只有一条记录的做法,inner join的话,如果要取分类下2条新闻就会返回两条记录。
因为最终效果是这样:

分类1
. 文章1
. 文章2

分类2
. 文章3
. 文章4

当然如果实在没办法,inner join也可以,我在脚本里具体处理掉它。
liangCK 2009-04-29
  • 打赏
  • 举报
回复
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);

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧