项目____DUPLICATE、int/varchar、根据多字段排序、根据查询结果反查
2015-08-31 18:31
393 查看
前提:MyBatis框架下! 利用框架写入与直接在sqlyog中写入结果不同!
duplicate:
int varchar:
设置
id为int型
name为varchar型
day为int型 且默认值设置为0
当id没有传入值时 将会报错Incorrect integer value: '' for column 'id' at row 1
当day没有传入值时不会报错,day值为0
当name没有传入值时不会报错,name值为null
下次表中如果需要设置为int型字段,需要在存储值前判断,赋值null后可以顺利存储。
根据多字段排序:
根据查询结果反查:
需求:根据土地表,作物表,会员信息表查处土地作物名称和所有者。土地表中存的是作物id。本来打算从土地表中查处土地信息,在action内遍历查询每块土地对应的作物id的作物名称。现在这里的解决办法是把每块土地某个作物的id与名称根据id查询出来left join成一张新表然后再从大表中查询出所需要信息。
通过SQL语句解决了:需要根据第一次查询结果再次反查的问题。
duplicate:
INSERT INTO wc_plants ( id, name, seed_img, sprout_img, growup_img, ripe_img, sprout_day, growup_day, ripe_day ) VALUES ( #{id}, #{name}, #{seed_img}, #{sprout_img}, #{growup_img}, #{ripe_img}, #{sprout_day}, #{growup_day}, #{ripe_day}) ON DUPLICATE KEY UPDATE NAME=VALUES(NAME), seed_img=VALUES(seed_img),sprout_img=VALUES(sprout_img),growup_img=VALUES(growup_img),ripe_img=VALUES(ripe_img),sprout_day=VALUES(sprout_day),growup_day=VALUES(growup_day),ripe_day=VALUES(ripe_day);Tip:设置duplicate后,需要设置unique索引。当insert的字段中包含unique索引的字段,并且此字段的存储内容与表中的相冲突就会更新DUPLICATE KEY UPDATE后面的内容。
int varchar:
设置
id为int型
name为varchar型
day为int型 且默认值设置为0
当id没有传入值时 将会报错Incorrect integer value: '' for column 'id' at row 1
当day没有传入值时不会报错,day值为0
当name没有传入值时不会报错,name值为null
下次表中如果需要设置为int型字段,需要在存储值前判断,赋值null后可以顺利存储。
根据多字段排序:
SELECT * FROM wc_fields ORDER BY usable DESC , id DESC
根据查询结果反查:
SELECT wc_fields.id,newplants.plantsname1,wc_fields.plant1_time,newplants.plantsname2,wc_fields.plant2_time,newplants.plantsname3,wc_fields.plant3_time,wc_fields.usable, member_info.name,member_info.openid FROM wc_fields LEFT JOIN member_info ON wc_fields.id=member_info.field_id LEFT JOIN (SELECT plants1.id plantsid,plants1.name1 plantsname1,plants2.name2 plantsname2,plants3.name3 plantsname3 FROM (SELECT wc_fields.id id,NAME AS name1 FROM wc_fields LEFT JOIN wc_plants ON wc_fields.plant1=wc_plants.id ) AS plants1 LEFT JOIN (SELECT wc_fields.id id,NAME AS name2 FROM wc_fields LEFT JOIN wc_plants ON wc_fields.plant2=wc_plants.id) AS plants2 ON plants1.id=plants2.id LEFT JOIN (SELECT wc_fields.id id,NAME AS name3 FROM wc_fields LEFT JOIN wc_plants ON wc_fields.plant3=wc_plants.id) AS plants3 ON plants1.id=plants3.id) AS newplants ON wc_fields.id=newplants.plantsid ORDER BY usable DESC , wc_fields.id
需求:根据土地表,作物表,会员信息表查处土地作物名称和所有者。土地表中存的是作物id。本来打算从土地表中查处土地信息,在action内遍历查询每块土地对应的作物id的作物名称。现在这里的解决办法是把每块土地某个作物的id与名称根据id查询出来left join成一张新表然后再从大表中查询出所需要信息。
通过SQL语句解决了:需要根据第一次查询结果再次反查的问题。
相关文章推荐
- 计算机顶级会议Rankings && 英文投稿的一点经验
- struts2,hibernate4,spring3配置时问题汇总及解决办法
- Vampire Family and Horrible Father
- 我的监控世界观(5)--如何在监控中反映业务场景
- “男人不坏,女人不爱”说明了什么?
- IOS面试
- 对象作为参数传递的练习
- JS判断客户端是否是iOS或者Android
- Could not initialize class sun.awt.X11GraphicsEnvironment
- 软工视频总结
- Wireshark抓包软件提示The NPF driver isn’t running解决办法
- 关于在惠普实习的感想(第一周)
- ADO.Net 事务操作
- 玩转EasyUI之ValidateBox
- Java- 断言及程序的测试JUnit
- OC基础-零基础学习Objective-C:第四部分.NSArray
- iOS开发基础-UIButton
- iOS开发基础-UILabel
- OC基础-零基础学习Objective-C:第五部分.@property
- OC基础-零基础学习Objective-C:第六部分.ARC内存管理