请教一个mysql数据库查询的问题

redirggg 2012-11-06 10:17:39
有两个库(bbs、cms),三张表
bbs库的表bbs_users里面存在一些带字段test的用户,表结构如下:
username(用户名称) test
cms库 里面有两张表,分别为cms_posts,cms_users
cms_posts表结构大体如下:
ID(文章ID,后面提取文章要用到) post_author(发表该文章的用户ID)

cms_users结构如下:
ID(用户ID) user_login(用户名称)

现在想查询bbs_users库里面带字段test的所有用户,然后根据这些用户去查询cms_posts里面的最新文章ID,选最新的一篇文章。我写了个语句如下:
先取出bbs_users里面的所有带字段test的用户,如下:
$sql1 = "SELECT username,test FROM bbs.bbs_users where test = 1";
$clubs = $wpdb->get_results($sql1);
foreach($clubs as $club){
$name = $club->user_name;

$sql = "select * from (SELECT a.*,b.user_login,b.ID as user_id FROM cms_posts a LEFT OUTER JOIN cms_users b ON a.post_author = b.ID WHERE b.user_login = '$name' and post_status IN ('publish','static') group by ID order by post_date_gmt DESC limit 1 ) as total group by user_id order by post_date_gmt limit 10";
$POSTS = $wpdb->get_results($sql);
foreach ( $POSTS as $post ) {
$uid2 = $post->user_id;
$username = get_userdata($uid2);
$output = "用户名:".$username->user_login."<br>文章名称:".get_permalink($post->ID).";
}
echo $output;
}


输出的内容却达不到我要的效果,如用户会出现两次,最新文章输出也不对,求高人指点。。
...全文
195 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mysdzlt2007 2012-11-08
  • 打赏
  • 举报
回复
在cms_posts表的post_author列加索引,cms_users表的user_login加索引试试
mysdzlt2007 2012-11-07
  • 打赏
  • 举报
回复
SELECT cp1.*,cu.*,bu.* 
FROM mytest.`cms_posts` cp1
LEFT JOIN mytest.`cms_posts` cp2 ON cp1.post_author=cp2.post_author 
AND cp1.post_date_gmt<cp2.post_date_gmt 
RIGHT JOIN mytest.`cms_users` cu ON cp1.post_author=cu.ID 
RIGHT JOIN test.`bbs_users` bu ON cu.user_login=bu.username  
GROUP BY cp1.ID 
HAVING COUNT(cp2.ID)<1
redirggg 2012-11-07
  • 打赏
  • 举报
回复
sorry,忘加了,如下: INSERT INTO bbs_users (username,vip) VALUES('张三',1); INSERT INTO bbs_users (username,vip) VALUES('李四',1); INSERT INTO bbs_users (username,vip) VALUES('赵六',1); INSERT INTO cms_posts (ID,post_author,post_date_gmt) VALUES(201,1,'2012-06-03 12:50:28'); INSERT INTO cms_posts (ID,post_author,post_date_gmt) VALUES(322,2,'2012-06-02 12:50:28'); INSERT INTO cms_posts (ID,post_author,post_date_gmt) VALUES(451,3,'2012-06-01 12:50:28'); INSERT INTO cms_users (ID,user_login) VALUES(1,'张三'); INSERT INTO cms_users (ID,user_login) VALUES(2,'李四'); INSERT INTO cms_users (ID,user_login) VALUES(3,'赵六'); 非常感谢
ACMAIN_CHM 2012-11-07
  • 打赏
  • 举报
回复
贴出 explain SELECT cp1.*,cu.*,bu.* FROM cms_posts cp1 LEFT JOIN cms_posts cp2 ON cp1.post_author=cp2.post_author AND cp1.post_date_gmt<cp2.post_date_gmt RIGHT JOIN wp_users cu ON cp1.post_author=cu.ID RIGHT JOIN bbs.`bbs_users` bu ON cu.user_login=bu.username GROUP BY cp1.ID HAVING COUNT(cp2.ID)<1 #1054 - Unknown column 'bu.username' in 'on clause' 或者可以先添加必要的索引。
wwwwb 2012-11-07
  • 打赏
  • 举报
回复
插入记录的SQL呢?
redirggg 2012-11-07
  • 打赏
  • 举报
回复
感谢ACMAIN_CHM大大回复,如下: use bbs; create table bbs_users ( username varchar(20) vip int(1) ) use cms; create table cms_posts ( ID bigint(20) [文章ID] post_author int(20) post_date_gmt datetime ) create table cms_users ( ID bigint(20) [用户ID] user_login varchar(20) ) 查询bbs_users中vip字段等于1的用户,然后根据这个用户的user_name去查询cms_users中的用户ID,再根据这个用户ID去查询cms_posts中相关的文章,输出10个用户的最新文章。 想查询的结果如下: username ID[文章ID] post_date_gmt 张三 123 2012-06-03 12:50:28 李四 234 2012-06-02 12:50:27 赵六 234 2012-06-01 12:50:27 版本是MYSQL5.1
redirggg 2012-11-07
  • 打赏
  • 举报
回复
是我搞错了,字段名写错了,目前遇到的情况是执行了这条命令之后,耗时5分钟以上,求大神优化
redirggg 2012-11-07
  • 打赏
  • 举报
回复
引用 6 楼 mysdzlt2007 的回复:
SQL code12345678SELECT cp1.*,cu.*,bu.* FROM mytest.`cms_posts` cp1LEFT JOIN mytest.`cms_posts` cp2 ON cp1.post_author=cp2.post_author AND cp1.post_date_gmt<cp2.post_date_gmt RIGHT JOIN my……
非常感谢mysdzlt2007,运行之后报错如下: SELECT cp1.*,cu.*,bu.* FROM cms_posts cp1 LEFT JOIN cms_posts cp2 ON cp1.post_author=cp2.post_author AND cp1.post_date_gmt<cp2.post_date_gmt RIGHT JOIN wp_users cu ON cp1.post_author=cu.ID RIGHT JOIN bbs.`bbs_users` bu ON cu.user_login=bu.username GROUP BY cp1.ID HAVING COUNT(cp2.ID)<1 #1054 - Unknown column 'bu.username' in 'on clause'
ACMAIN_CHM 2012-11-06
  • 打赏
  • 举报
回复
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
ACMAIN_CHM 2012-11-06
  • 打赏
  • 举报
回复
参考下贴中的多种方法 http://blog.csdn.net/acmain_chm/article/details/4126306 [征集]分组取最大N条记录方法征集,及散分...

56,677

社区成员

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

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