有两个库(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;
}输出的内容却达不到我要的效果,如用户会出现两次,最新文章输出也不对,求高人指点。。

解决方案 »

  1.   

    参考下贴中的多种方法http://blog.csdn.net/acmain_chm/article/details/4126306
    [征集]分组取最大N条记录方法征集,及散分...
      

  2.   

       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
      

  3.   

    感谢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
      

  4.   

    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,'赵六'); 
    非常感谢
      

  5.   

    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
      

  6.   


    非常感谢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'
      

  7.   

    贴出 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'或者可以先添加必要的索引。
      

  8.   

    在cms_posts表的post_author列加索引,cms_users表的user_login加索引试试