sql多表多条件嵌套查询
现在有两个表,一个会员表(phome_enewsmember),一个产品表(phome_ecms_memberpro)。现在要求:1,查询会员表,要求会员组字段>1(大于...
现在有两个表,一个会员表(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");
?> 展开
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");
?> 展开
2个回答
展开全部
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 * 来查询。慢慢努力哦!
--存储过程 效率更高些 这个写的不好。一般都不in查询 因为他的效率特别低。而且不需要全部字段的话,尽量就不用select * 来查询。慢慢努力哦!
展开全部
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 )
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 )
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询