您的位置:首页 > 其它

项目____DUPLICATE、int/varchar、根据多字段排序、根据查询结果反查

2015-08-31 18:31 393 查看
前提:MyBatis框架下! 利用框架写入与直接在sqlyog中写入结果不同!

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语句解决了:需要根据第一次查询结果再次反查的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: