首页新闻找找看学习计划

关于MYSQL连接查询,求助

0
悬赏园豆:50 [已解决问题] 解决于 2012-11-15 15:17

  这样的字段可以用作连接查询么?

比如  

select * from 优惠券表  left join 商户表 on 商户表.shopid in (a.shopidstr)

最初是一张优惠券对应一个商家,用  商户表.shopid=优惠券表.shopid 查询,

现在需求有变化开设分店,就采取这样的措施保存到一个字段中,一张优惠券可以给在其他分店都重用

希望查询出来是shopidstr里的有几个店铺就出来几条记录 这样的查询可以实现么?

BiakeChou的主页 BiakeChou | 菜鸟二级 | 园豆:204
提问于:2012-11-15 10:18
< >
分享
最佳答案
0

可以用like关键字:

select * from 优惠券表  left join 商户表 on 优惠券表.shopidstr like concat('%,',商户表.shopid,',%')
收获园豆:50
秦楼东 | 小虾三级 |园豆:913 | 2012-11-15 10:35

试了,这个可以学习了!

BiakeChou | 园豆:204 (菜鸟二级) | 2012-11-15 12:48
其他回答(1)
0

首先,现代的数据库叫做"关系型数据库", 它的理念应该是透过关系来实现数据的关联, 也就是说, 当你开设分店时, 你应该再建一张子表, 而不是像这样把这些都放进一个字段里.

其次, 要达到你想要的效果不是做不到, 但是你的语句肯定不行. 写进来也比较麻烦, 建议最好不要这样弄, 改为建一张子表.

夏狼哉 | 园豆:833 (小虾三级) | 2012-11-15 10:30

我的意思不是建分店哦。。分店肯定有新建表, 这个字段是券表里的,之前是一张券对应一商户,现在一券在多个店都能显示,避免重复添加, 就是列表查询的时候遇到上述问题~

支持(0) 反对(0) BiakeChou | 园豆:204 (菜鸟二级) | 2012-11-15 12:42

@BiakeChou: 

我知道你的分店是单独的表.....

我意思是说, 你的需求发生了变化, 你应该单独建一张这张表的子表, 用于表达它跟分店之间的这种一对多的关系, 也就是说, 用一张表来取代这个字段. 这不存在任何重复添加的问题.

支持(0) 反对(0) 夏狼哉 | 园豆:833 (小虾三级) | 2012-11-15 13:30

@夏狼哉: 懂你意思了  做的时候我也是想这样多加一张表 用券ID 对应 商户ID  就2个字段,再来个一对多就解决了,但是想想为了2个字段多一张表,增删改查都会多一操作一个表,工作量也上去。当然对关系方面不是太专业,是否是有新关系的时候最好是多一张表,哪怕字段只有少数几个,sql操作上会多几步? 

支持(0) 反对(0) BiakeChou | 园豆:204 (菜鸟二级) | 2012-11-19 15:54

@BiakeChou: 

多一张表工作量有多少增加?这一点我表示不理解。。。相反,拼接字符串的操作更麻烦才对。

最后一句你说得对,数据库的“专业”就是处理表,你不要觉得增加一张表代价很大,相反,用LIKE去做模糊搜索的代价才大得多。而且对数据建模来说,大字段也完全把模型破坏了。

支持(0) 反对(0) 夏狼哉 | 园豆:833 (小虾三级) | 2012-11-19 16:26

@夏狼哉: 恩 了解了 谢谢你的建议噢~

支持(0) 反对(0) BiakeChou | 园豆:204 (菜鸟二级) | 2012-11-22 15:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册