NutzCN Logo
问答 Nutz核心包Dao中,入参为String和List<String>的故事
发布于 2830天前 作者 fangjingping 2019 次浏览 复制 上一个帖子 下一个帖子
标签:
WHERE AO.option_code IN (@optionCodeList) GROUP BY AO.option_group

第一段是代码。其中@optionCodeList 被替换成类型为List的一个list。

 WHERE AO.option_code IN ('["30", "29", "28", "27", "10", "5"]') GROUP BY AO.option_group

实际想要的sql样式是:

WHERE AO.option_code IN ('30', '29', '28', '27', '10', '5') GROUP BY AO.option_group

求解,顺便赚积分。话说积分有什么用呢?

9 回复

对,没有看错,我数据需要的是String 而不是Integer类型

什么版本? 代码贴一下

Nutz 1.r.60

public String getAnswerCodeWithOptionCode(List<String> optionCodeList){
		Sql sql = Sqls.create("SELECT AA.answer_code FROM apc_answer AA "+
							"RIGHT JOIN "
							+ "(SELECT AO.option_group,count(option_group) as ctgroup FROM apc_option AO WHERE AO.option_code "
							+ "IN (@optionCodeList) GROUP BY AO.option_group ORDER BY ctgroup DESC limit 1) T ON T.option_group = AA.option_group");
		sql.params().set("optionCodeList", optionCodeList);
		sql.setCallback(Sqls.callback.str());
		dao.execute(sql);
		
		return sql.getString();
	}

结果用List的格式,最后变成了如下:

WHERE AO.option_code IN ('[30, 29, 28, 27, 10, 5]') GROUP BY AO.option_group 

目前的解决办法回归。 当然,问题具有特殊性。 关于字符串拼接的效率问题。 希望得到指点

public String getAnswerCodeWithOptionCode(List<String> optionCodeList){
		StringBuilder sb = new StringBuilder();
		for(String optionCode:optionCodeList){
			sb.append(optionCode);
			sb.append("',");
		}
		
		String optionCodeStr = sb.toString().substring(0, sb.toString().length()-2);
		Sql sql = Sqls.create("SELECT AA.answer_code FROM apc_answer AA "+
							"RIGHT JOIN "
							+ "(SELECT AO.option_group,count(option_group) as ctgroup FROM apc_option AO WHERE AO.option_code "
							+ "IN (@optionCodeList) GROUP BY AO.option_group ORDER BY ctgroup DESC limit 1) T ON T.option_group = AA.option_group");
		sql.params().set("optionCodeList", optionCodeStr);
		sql.setCallback(Sqls.callback.str());
		dao.execute(sql);
		
		return sql.getString();
	}
sql.params().set("optionCodeList", optionCodeStr.toArray());

OK,帅气的解决方案。回归下。终结问题。 (貌似是我自己格式不对,跟Nutz没多大关系。不过,List相对于Array 更实用。建议默认List<?>)

public String getAnswerCodeWithOptionCode(List<String> optionCodeList){
		
		Sql sql = Sqls.create("SELECT AA.answer_code FROM apc_answer AA "+
							"RIGHT JOIN "
							+ "(SELECT AO.option_group,count(option_group) as ctgroup FROM apc_option AO WHERE AO.option_code "
							+ "IN (@optionCodeList) GROUP BY AO.option_group ORDER BY ctgroup DESC limit 1) T ON T.option_group = AA.option_group");
		sql.params().set("optionCodeList", optionCodeList.toArray());
		sql.setCallback(Sqls.callback.str());
		dao.execute(sql);
		 
		return sql.getString();
	}

这是console打印的SQL。做参考

For example:> "SELECT AA.answer_code FROM apc_answer AA RIGHT JOIN (SELECT AO.option_group,count(option_group) as ctgroup FROM apc_option AO WHERE AO.option_code IN ('4','29','28','27','10','5') GROUP BY AO.option_group ORDER BY ctgroup DESC limit 1) T ON T.option_group = AA.option_group"
添加回复
请先登陆
回到顶部