sql多表多条件嵌套查询

现在有两个表,一个会员表(phome_enewsmember),一个产品表(phome_ecms_memberpro)。现在要求:
1,查询会员表,要求会员组字段>1(大于1为VIP会员),checked=1(等于1为审核会员);
2,查询会员在产品表里发布的数据大于4条(包括4条);

注意:我主要查询的是产品表,只显示每个会员发布的前4个产品,注意每个会员只显示4条。
我需要把这些条件合并为一个sql语句,请高手来帮忙一下。谢谢。

以下是我用的循环嵌套来查询的,但有两个bug

一,当该会员为VIP会员,并且没有发布产品,或者发存的产品不大于4条,那么我的分页就出问题了,预设为第页显示16条(4个会员

*4个产品),但当其中一个会员产品没有4个时间,该页就不能显示到16条了。
二,“$pagerow=$empire->num("select * from phome_ecms_memberpro where checked=1");”这个是查询总产品的条数,但是有些产

品可能不是会员发的,也有可能不是VIP会员发的,也有可能是该员发布好产品后被删除了,那么得到的总产品数就不对了。

有点挑战吧。希望敢于挑战的HI我

//我的代码

<?php
$page=$_GET['page'];
if(!$page){
$page=0;
}
$evepage=4;//每页显示多少条
$statpage=$page*$evepage;

$sql="select * from phome_enewsmember where groupid>4 and checked=1 order by userid desc limit

$statpage,$evepage";
// echo $sql;
$result=$empire->query($sql);
while($rs=$empire->fetch($result)){
$userid=$rs['userid'];
$sqlp="select * from phome_ecms_memberpro where userid=$userid and checked=1 order by newstime,id desc

limit 4";
$resultp=$empire->query($sqlp);
while($rsp=$empire->fetch($resultp)){
$id=$rsp['id'];
$userid=$rsp['userid'];
$title=$rsp['title'];
$titlepic=$rsp['titlepic'];
?>
<li><span><a href="[!--news.url--]e/space/product_show.php?id=<?=$id?>&userid=<?=$userid?>&mid=11"

target="_blank"><img src="<?=$titlepic?>"></a></span><br>
<a href="[!--news.url--]e/space/product_show.php?id=<?=$id?>&userid=<?=$userid?>&mid=11" target="_blank"><?

=$title?></a></li>
<?php
}
}
?>
</ul>
<?php
$pagerow=$empire->num("select * from phome_ecms_memberpro where checked=1");
?>

select * from phome_ecms_memberpro where userid in( select userid from phome_ecms where checked >1 and id in ( select userid from phome_ecms_memberpro group by userid having count(userid)>4)) order by id asc

--存储过程 效率更高些 这个写的不好。一般都不in查询 因为他的效率特别低。而且不需要全部字段的话,尽量就不用select * 来查询。慢慢努力哦!
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-09-13
SELECT *
FROM ( SELECT productNo,
product.userID
FROM ( SELECT *
FROM phome_ecms_memberpro
) product
LEFT JOIN ( SELECT product.userID
FROM phome_ecms_memberpro product
LEFT JOIN ( SELECT *
FROM phome_enewsmember
WHERE groupid > 1
AND checked = 1
) [user] ON product.userID = [user].userID
WHERE [user].USERid IS NOT NULL
GROUP BY product.userID
HAVING COUNT(product.userID) >= 4
) checkUser ON checkUser.userID = product.USERid
WHERE checkUser.userID IS NOT NULL
) T
WHERE [productNo] IN (
SELECT TOP 4
productNo
FROM ( SELECT productNo,
product.userID
FROM ( SELECT *
FROM phome_ecms_memberpro
) product
LEFT JOIN ( SELECT product.userID
FROM phome_ecms_memberpro product
LEFT JOIN ( SELECT *
FROM phome_enewsmember
WHERE groupid > 1
AND checked = 1
) [user] ON product.userID = [user].userID
WHERE [user].USERid IS NOT NULL
GROUP BY product.userID
HAVING COUNT(product.userID) >= 4
) checkUser ON checkUser.userID = product.USERid
WHERE checkUser.userID IS NOT NULL
) H
WHERE H.userID = T.userID
ORDER BY T.productNo )
相似回答