使用find_in_set()函数实现批量删除

今天在实现客户删除的时候,碰到了无法批量删除的原因,然后百度了一下

用find_in_set函数()解决了,记录一下

 

find_in_set是精确匹配,字段值以英文”,”分隔,

语法为:

FIND_IN_SET(str,strlist)
 
//str 要查询的字符串

//strlist 字段名 参数以”,”分隔 如 (1,2,6,8)

//查询字段(strlist)中包含(str)的结果,返回结果为null或记录

下面举一个简单例子:

假设通过request.getParameterValues()获取jsp页面的复选框,复选框传值为id,返回值为string数组

但FIND_IN_SET(str,strlist)的strlist格式为"value1,value2,..."格式,所以我们进行字符串处理

			String[] order_ids = request.getParameterValues("orderId");
			//对传值进行字符串处理,如:"100007,100008"
			StringBuffer order_idss = new StringBuffer();
			for(int i = 0; i < order_ids.length; i++)
			{ 
				order_idss. append(order_ids[i]);
				if(i != order_ids.length - 1) {
					order_idss. append(",");
				}
			}
			String order_id = order_idss.toString();

处理之后传给dao层

通过\"转义字符实现拼接,假设传值为"1000067,100008"

那么如下sql语句就为delete from `order` where find_in_set(order_id,"1000067,100008")";

	/**
	 * 删除
	 */
	@Override
	public void deleteOrder(String order_id) {
		String sql = "delete from `order` where find_in_set(order_id,\"" + order_id + "\")";
		Object[] objs = {};
		executeUpdate(sql, objs);
	}

这样就能实现批量删除了

 

实现批量查询也是一样

sql语句为:select * from `table表名` where find_in_set(匹配的列名,"对应的条件1,对应的条件2");

 

你可能感兴趣的:(mysql,mysql,java,javaweb,后端,编程语言)