比如一组数据由件号,描述,型号,供应商等多元素组成,可以单一通过件号查询,也可以通过件号+型号查询,甚至可以描述+型号+供应商查询。在设计逻辑上,是通过排列组合考虑所有可能性吗?
随着可能会查询用到的元素数量增多,除了写得又臭又长,又觉得特别容易错漏
业余爱好开发者,抱歉
随着可能会查询用到的元素数量增多,除了写得又臭又长,又觉得特别容易错漏
业余爱好开发者,抱歉

感谢帮助!
sql = "select code, desc, engine, cost, supplier, offer, uweight, remarkinfo, podate, qty from f65 where 1=1" param = list() if code != '': sql = sql + ' AND code LIKE ?' param.append('%' + str(code) + '%') if desc != '': sql = sql + ' AND desc LIKE ?' param.append('%' + str(desc) + '%') if engine != '': sql = sql + ' AND engine LIKE ?' param.append('%' + str(engine) + '%') if supplier != '': sql = sql + ' AND supplier LIKE ?' param.append('%' + str(supplier) + '%') df = pd.DataFrame(pd.read_sql(sql, conn, params=param)) 1 dunkelheit Jul 9, 2022 |
2 akira Jul 9, 2022 多条件的组合查询要么都是 或 ,要么都是 与, 看需要,直接列出来就好了 |
3 meeop Jul 9, 2022 代码上: if(件号!=null) sql+=“ 件号=xxx ” if(型号!=null) sql+=“ 型号=xxx ” 所有排列组合都可以啊 数据库索引上是得排列组合的,所以还是要约束需求,别什么查询都支持 |
4 dcsuibian Jul 9, 2022 引用知乎的: db 访问分为这么几种 1. 写 sql ,各个 db 差异要自己适配 2. 写 dsl ,屏蔽了 db 差异,自动适配 3. 运行时或编译时自动合成 sql ,屏蔽 db 差异 我是第 3 种动态生成 sql 的,用的是 JPA 的 Specification ,代码大概是这个样子: Specification<RecordPO> spec = (root, query, cb) -> { Path<String> termPath = root.get("term"); Path<Long> beginTimePath = root.get("beginTime"); Path<Long> endTimePath = root.get("endTime"); Predicate predicate = cb.equal(cb.literal(1), 1); if (null != qo.getTerm()) { predicate = cb.and(predicate, cb.equal(termPath, qo.getTerm())); } if (null != qo.getBeginTimeGreaterThanEqual()) { predicate = cb.and(predicate, cb.greaterThanOrEqualTo(beginTimePath, qo.getBeginTimeGreaterThanEqual())); } if (null != qo.getEndTimeLessThanEqual()) { predicate = cb.and(predicate, cb.lessThanOrEqualTo(endTimePath, qo.getEndTimeLessThanEqual())); } query.orderBy(cb.asc(root.get("endTime"))); return predicate; }; return spec; |
5 youthfire OP 先谢谢各位回答者!你们回复的不少内容一时未能消化。我上传了一张图来具体表达,如果之前文字没有表述足够清晰的话。 |