求助一个查询的SQL语句!!谁解决100分全给了!!各位大神帮帮忙!!!

legendul java开发  2015-07-17 07:43:54
MySql数据库
数据库库表: id name parentid
category
1 母婴食品 0
2 孕妇食品 1
3 孕妇奶粉 2
数据库表: id category_id name
product
123 3 安慕
category是共有三级目录,product存的category_id是category的三级目录。
现在前台查传过来一个category的id集合String[]category_ids,不确定是几级目录
,现在需要根据传过来的id查出所有商品名字。
我的思路一是:根据传过来的id,查出所有的category的三级目录,组成一个集合。
然后再调用product的方法 category_id in (查到的集合)。

拜托了。
...全文
364 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Giberson1 2015-08-06
步骤: 1》根据传过来category_ids,找出对应的所有三级目录 注意:此处是用递归来实现的,另外要 对重复数据进行处理。
package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * <p>
 * <pre>
 * <b>类描述:</b>
 * 	根据传过来的id查出所有商品名字
 * <b>作者:</b>
 * 	giberson1
 * <b>创建时间:</b> 
 * 	2015年8月6日 下午7:12:48
 * </pre>
 * </p>
 */
public class FindThirdCategory {

	public static void main(String[] args) {

	}
	/**
	 * <p>
	 * <pre>
	 * <b>方法描述:</b>
	 * 	根据categoryIds找到所有三级目录
	 * <b>作者:</b>
	 * 	giberson1
	 * <b>创建时间:</b> 
	 * 	2015年8月6日 下午7:24:50
	 * </pre>
	 * </p>
	 * @param  
	 * @return List<String>
	 */
	public List<String> getAllCategoryIds(String... categoryIds){
		HashMap<String,String> flagMap = new HashMap<String,String>(); //不用来存储,而是当成“去重复数据的过滤器”
		List<String> list = new ArrayList<String>();  //存放所有三级目录
		for (int i = 0; i < categoryIds.length; i++) {
			String categoryId = categoryIds[i];
			List<String> thirdList = new ArrayList<String>();
			getThindCategoryIds(thirdList,categoryId);
			//对thirdList进行过滤后,添加到list。
			for (String s : thirdList) {
				if(!flagMap.containsKey(s)){
					flagMap.put(s, s);
					list.add(s);
				}
			}
		}
		return list;
	}
	
	/**
	 * <p>
	 * <pre>
	 * <b>方法描述:</b>
	 * 	根据categoryId找到对应三级目录--------通过递归来实现
	 * <b>作者:</b>
	 * 	giberson1
	 * <b>创建时间:</b> 
	 * 	2015年8月6日 下午7:25:07
	 * </pre>
	 * </p>
	 * @param  
	 * @return List<String>
	 */
	public void getThindCategoryIds(List<String> list,String categoryId){
		if(isThirdCatagory(categoryId)){ //递归结束
			list.add(categoryId);
		}else{ //开始递归
			List<String> subList = getSubCategoryIds(list,categoryId);
			for (String subCategoryId : subList) {
				getThindCategoryIds(list,subCategoryId);
			}
		}
	}
	/**
	 * <p>
	 * <pre>
	 * <b>方法描述:</b>
	 * 	查询非叶子节点,的所有子节点
	 * <b>作者:</b>
	 * 	giberson1
	 * <b>创建时间:</b> 
	 * 	2015年8月6日 下午7:43:41
	 * </pre>
	 * </p>
	 * @param  
	 * @return List<String>
	 */
	private List<String> getSubCategoryIds(List<String> list,String categoryId) {
		List<String> list = new ArrayList<String>();  //存放categoryId对应的子目录
		//TODO :这里不难,这里楼主自己去判断
		// 就是找categoryId对应的子目录
		return list;
	}
	/**
	 * <p>
	 * <pre>
	 * <b>方法描述:</b>
	 * 	判断是否第三级目录
	 * <b>作者:</b>
	 * 	giberson1
	 * <b>创建时间:</b> 
	 * 	2015年8月6日 下午7:35:24
	 * </pre>
	 * </p>
	 * @param  
	 * @return boolean
	 */
	private boolean isThirdCatagory(String categoryId) {
		//TODO :这里不难,楼主自己去判断
		// 大概思路就是,你根据categoryId查询category这表,
		// parentid中没有categoryId的记录,就说明这个这个节点没有子节点,
		//说明他是叶子节点,即第三级目录。如果是return true,否则返回false
		// ... ... //
		return false;
	}
}
2》根据1》中三级目录管理product。 这部不难了,楼主自己解决哈。
回复
Giberson1 2015-08-06
其实有很多种办法,不过最关键的是两点:效率 和 去掉重复数据
回复
lxduu87 2015-08-06
select id from category where id in (category_ids) and parentid = 2;简化为这样
回复
lxduu87 2015-08-06
为啥要传不确定的级别目录

select id, category_id, name from product where category_id in (
select id from (select id from category where id in (category_ids)) a where parentId = 2 //第3级目录的
union
selecct id from category where parentId in (select id from (select id from category where id in (category_ids)) a where parentId = 1)  //2级目录的
union
select id from category where parentId in (selecct id from category where parentId in (select id from (select id from category where id in (category_ids)) a where parentId = 0)) // 1级目录
)
回复
select * from product  category_id   in
(select id from category where id  in (categoryids) )
回复
sunshiwu1984 2015-08-05
select * from product category_id in (select id from category where id in (categoryids) and id=='3' ) categoryids是你前台传过来的id集合,拼成in参数的形式。试试这样行不。。。
回复
菜 头 2015-08-05
select * from product where category_id in(categoryids)
回复
晴天_ccc 2015-07-18
select * from product where category_id in (select id from category)
回复
yu672690859 2015-07-17
from product where category in (categoryids)
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-07-17 07:43
社区公告
暂无公告