调用目的:首页调用推荐商铺
表结构:商铺一个表(shops)、商铺图片一个表(pictures)、打折卡一个表(carddiscounts)
表间关系:商铺表字段:sid = 图片表字段:shopid = 打折卡字段:shopid
这三个表就是靠这个商铺ID号联系起来的。一开始不调用打折卡的时候,只调用两个表,这个没有错误: Select s.sid,s.shopname,p.folder,p.filename From shops s,pictures p Where s.finer=1 and (s.classcode BETWEEN '1100' AND '1199') and s.sid=p.shopid and Order by s.sid DESC limit 0,8然后加上了第3个表:Select s.sid,s.shopname,p.folder,p.filename,c.discount,c.exception From shops s,pictures p,carddiscounts c where s.finer=1 and (s.classcode BETWEEN '1100' AND '1199') and s.sid=p.shopid and c.shopid=p.shopid Order by s.sid DESC Limit 0,8以目前的数据,正常的话满足条件的应该只有一个商铺,而这个商铺有3张图片(图片表里),正常的话应该只显示其中一张图片吧~~~但是却出来三条结果,都是这同一个商铺,把3张图都调出来了 SQL不到家~~~望大家指正一下 调用结果页面演示: http://vip.0534.com/ 下半部分的 商家推荐 之 购物 那里...
表结构:商铺一个表(shops)、商铺图片一个表(pictures)、打折卡一个表(carddiscounts)
表间关系:商铺表字段:sid = 图片表字段:shopid = 打折卡字段:shopid
这三个表就是靠这个商铺ID号联系起来的。一开始不调用打折卡的时候,只调用两个表,这个没有错误: Select s.sid,s.shopname,p.folder,p.filename From shops s,pictures p Where s.finer=1 and (s.classcode BETWEEN '1100' AND '1199') and s.sid=p.shopid and Order by s.sid DESC limit 0,8然后加上了第3个表:Select s.sid,s.shopname,p.folder,p.filename,c.discount,c.exception From shops s,pictures p,carddiscounts c where s.finer=1 and (s.classcode BETWEEN '1100' AND '1199') and s.sid=p.shopid and c.shopid=p.shopid Order by s.sid DESC Limit 0,8以目前的数据,正常的话满足条件的应该只有一个商铺,而这个商铺有3张图片(图片表里),正常的话应该只显示其中一张图片吧~~~但是却出来三条结果,都是这同一个商铺,把3张图都调出来了 SQL不到家~~~望大家指正一下 调用结果页面演示: http://vip.0534.com/ 下半部分的 商家推荐 之 购物 那里...
From shops s,pictures p
Where s.finer=1
and (s.classcode BETWEEN '1100' AND '1199')
and s.sid=p.shopid and Order by s.sid DESC limit 0,8
Select s.sid,s.shopname,p.folder,p.filename,c.discount,c.exception From shops s,pictures p,carddiscounts c where s.finer=1 and (s.classcode BETWEEN '1100' AND '1199') and s.sid=p.shopid and c.shopid=p.shopid Order by s.sid DESC Limit 0,8补充几个字段说明:
s.sid - shops 表 商铺ID
s.shopname - shops 表 商铺名称p.shopid - pictures 表 所属商铺ID
p.folder - pictures 表 图片存放目录
p.filename - pictures 表 图片文件名c.shopid - carddiscounts 表 所属商铺ID
c.discount - carddiscounts 表 折扣率(如 9.5)
c.exception - carddiscounts 表 折扣说明
但是pictures 表,则有可能会有多条记录与 shops 表的记录匹配
sid shopname classcode finer
1 德州大酒店 1001 1
2 德州市百货大楼 1114 1
3 金盾法律事务所 1401 0
4 相记大盘鸡 1010 1pictures 表:(第一行为字段名,pid为标识)
pid shopid folder filename
1 1 2009-06 15_1244706626.jpg
2 2 2009-06 81_1244799824.gif
3 2 2009-06 96_1244799892.gif
4 2 2009-06 25_1244800264.jpgcarddiscounts 表:(第一行为字段名)
shopid discount exception
1 9.5 烟酒、特价菜除外
2 9.0 特价商品除外
4 8.5 优惠时间至2009-08月,另外扎啤免费基本用到的就是这些字段,pictures表里的4条记录,其中有3条都是shopid=2的,即有3张图片是“德州市百货大楼”的,但是调用时,只需要显示出“德州市百货大楼”即可,不用显示3个“德州市百货大楼”。。调用页面:http://vip.0534.com 下半部分,推荐商铺 - 购物 那里
From shops s,
(select * from pictures p1
where not exists (select 1 rom pictures where shopid=p1.shopid and pid>p1.pid)
) p,
carddiscounts c
where s.finer=1
and (s.classcode BETWEEN '1100' AND '1199')
and s.sid=p.shopid
and c.shopid=p.shopid
Order by s.sid DESC Limit 0,8
倒是哪张都可以~~~最新的吧,pid最大的。
select a.* from pictures a inner join
(select shopid,max(pid) as ma frm pictures group by shopid) b on a.shopid=b.shopid and a.pid=b.ma
将上述结果再与其它两表连接
哎呀感谢你的思路——~我怎么就忘了Group by了我那语句加上group by 就好啦
Select s.sid,s.shopname,p.folder,p.filename,c.discount,c.exception From shops s,pictures p,carddiscounts c where s.finer=1 and (s.classcode BETWEEN '1100' AND '1199') and s.sid=p.shopid and c.shopid=p.shopid Group by p.shopid Order by s.sid DESC Limit 0,8但是这样Group by的时候,图片是调用pid最小的了,也就是最老的图片了。然后又改了一下:Select s.sid,s.shopname,p.folder,p.filename,c.discount,c.exception From modoer_shops s,(select * from modoer_pictures order by pid desc) p,modoer_carddiscounts c Where s.finer=1 and (s.classcode BETWEEN '1100' AND '1199') and s.sid=p.shopid and c.shopid=p.shopid Group by p.shopid Order by s.sid DESC Limit 0,8在此感谢两位大哥~~~