mysql 实现 start with
 @param ids 要查询的起始 start with 
	 * @param allres  包含要递归数据的结果集 ( 查询时别名ID PID )
	 * @param pos    prior--->    UP or DOWN
	 * @return
	 */
	public static List<Map<String, Object>> getTree(ArrayList<String> ids,
			List<Map<String, Object>> allres,String pos) {
		List<Map<String, Object>> res=new ArrayList<Map<String,Object>>();
		 if("up".equals(pos)){
			 res=toCreatTreeUp(ids,allres,res);
		 }
		 if("down".equals(pos)){
			 res=toCreatTreeDown(ids,allres,res);
		 }
		 return res;
		}
	private static List<Map<String, Object>> toCreatTreeUp(ArrayList<String> ids,
		List<Map<String, Object>> allres,List<Map<String, Object>> res) {
		ArrayList<String> idss = new ArrayList<String>();
		for(String id :ids){
			   for (Map<String, Object> map : allres) {
				   if(id.equals(map.get("ID").toString())){
					   idss.add(map.get("PID").toString());
					   res.add(map);
			         }
		       }
		   }
		if (idss.size()!=0) {
			ids = idss;
			res = toCreatTreeUp(ids,allres,res);
		}
		return res ;
	}
	private static List<Map<String, Object>> toCreatTreeDown(ArrayList<String> ids,
			List<Map<String, Object>> allres,List<Map<String, Object>> res) {
			ArrayList<String> idss = new ArrayList<String>();
			for(String id :ids){
				   for (Map<String, Object> map : allres) {
					   if(id.equals(map.get("ID").toString())){
						   res.add(map);
					   }
					   if(id.equals(map.get("PID").toString())){
						   idss.add(map.get("ID").toString());
				       }
			       }
			   }
			if (idss.size()!=0) {
				ids = idss;
				res = toCreatTreeDown(ids,allres,res);
			}
			return res ;
	}
原文:http://www.cnblogs.com/sx2zx/p/6229260.html
