mysql如何获取对应ID相同字段的数量?

商家列表名mer_content
商家上传图片表名mer_imgurl


商家列表名和图片表名都有对应的ID。

商家列表mer_content

id name
1 我是商家名称1
2 我是商家名称2

商家上传图片存放表mer_imgurl

uid id url
1 1 images/logo.gif
2 1 images/menu.gif
3 1 images/store_pic.gif
4 2 images/logo.gif
5 2 images/userupfile.jpg

表结构大致如上,商家列表mer_content这个表里的ID对应商家上传图片表里的id,而url里的图片就是该商家所上传的图片。

问题,请问我该如何获取商家上传图片的数量呢?
我当前使用

SELECT a.*,count(a.url) as num,b.* FROM mer_imgurl a LEFT JOIN mer_content b on a.id = b.id WHERE a.id='1'

的确可以在num字段查看到对应相同ID上传的图片数量,但在前端列表里显示的却有些混乱?商家列表第一个明明有10张图却只循环出一个图片,第二个两个,之后才是三个,请问是怎么回事呢?该如何解决呢?


具体代码

$merchatdb = $db->query("SELECT a.*,count(a.url) as num,b.* FROM mer_imgurl a LEFT JOIN mer_content b on a.id = b.id WHERE a.id='1'");
while($merdb = $db->fetch_array($merchatdb)){
    $shopdb[]=$merdb;
}
foreach($shopdb AS $k => $v){
    echo $v[url]; //循环当前商家对应ID所上传所有的图片
}

非常感谢!~

阅读 2.8k
1 个回答
select a.name, b.total from mer_content a 
inner join
(select id, count(url) as total from mer_imgurl group by id) b
on a.id = b.id

就是把表二先按做个group,再和表一用id来join。
如果表二的id和url会有重复情况的话,那么b中需要改成count(distinct url)

希望能够帮到你。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题