有两个库(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;
}输出的内容却达不到我要的效果,如用户会出现两次,最新文章输出也不对,求高人指点。。
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;
}输出的内容却达不到我要的效果,如用户会出现两次,最新文章输出也不对,求高人指点。。
[征集]分组取最大N条记录方法征集,及散分...
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
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
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,'赵六');
非常感谢
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
非常感谢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'
#1054 - Unknown column 'bu.username' in 'on clause'或者可以先添加必要的索引。