http://my.oschina.net/u/178116/blog/684608
-- 名称:mysql递归查询存储过程(2014-04-05)
-- 入:@table 表名[varchar(200)]
-- 入:@field 要查询返回的字段名(例如: name,age,remark)[text]
-- 入:@order 返回结果的排序(例如 name desc,age asc)[text]
-- 入:@idName 主键列名[varchar(200)]
-- 入:@pidName父键列名[varchar(200)]
-- 入:@id 主键值[varchar(200)],不能为null,如果值是null,说明要查询全部,请自己查询
-- 入:@upDown 向上级联还是向下级联,1=上 0=下[int]
-- 入:@self 是否包含自己 1=是 0=否[int]
-- 返回查询结果集
DROP PROCEDURE IF EXISTS Query_Dg;
CREATE PROCEDURE Query_Dg
(
IN table_ VARCHAR(200),
IN field_ TEXT,
IN order_ TEXT,
IN idName_ VARCHAR(200),
IN pidName_ VARCHAR(200),
IN id_ VARCHAR(200),
IN upDown_ INT,
IN self_ INT
)
BEGIN
DECLARE _sqlStr VARCHAR(4000); -- 动态sql
DECLARE _idParam VARCHAR(4000); -- id存放的变量
DECLARE _idSet VARCHAR(4000); -- 结果
SET @_idSet = '';
-- 查询id开始
IF(self_ = 1)THEN -- 包含自己
SET @_idSet = id_;
END IF;
-- 递归开始
IF(upDown_ = 1)THEN -- 向上递归
SET @_sql = CONCAT('SELECT ',pidName_,' INTO @_idParam FROM ',table_,' WHERE ',idName_,' = ?');
ELSE -- 向下递归
SET @_sql = CONCAT('SELECT GROUP_CONCAT(',idName_,') INTO @_idParam FROM ',table_,' WHERE FIND_IN_SET(',pidName_,', ?) > 0');
END IF;
SET @_idParam = id_; -- 输入参数使用时不能 @
PREPARE _sqlStr FROM @_sql;
EXECUTE _sqlStr USING @_idParam;
WHILE @_idParam IS NOT NULL DO
SET @_idSet = CONCAT(@_idSet,',',@_idParam);
EXECUTE _sqlStr USING @_idParam;
END WHILE;
-- 查询id结束
SET @_sql = CONCAT('SELECT ',field_,' FROM ',table_,' WHERE FIND_IN_SET(',idName_,', ? ) > 0 order by ',order_); -- 查询
DEALLOCATE PREPARE _sqlStr; -- 解除预编译
PREPARE _sqlStr FROM @_sql; -- 重新预编译
EXECUTE _sqlStr USING @_idSet;
DEALLOCATE PREPARE _sqlStr;
END
分享到:
相关推荐
MySQL的InnoDB存储引擎支持多种不同的处理外键的方式,包括级联更新(Cascade Update)和级联删除(Cascade Delete)。本文将深入探讨这两种机制及其在MySQL中的实现方式。 #### 一、基本概念 **级联更新(Cascade ...
最新最完整的中英法文ISO3166世界行政区划MySQL级联表,包含中国
在Java编程中,级联查询和分页查询是数据库操作中的常见需求,特别是在处理大量数据时。级联查询用于获取一个实体的相关实体信息,而分页查询则用于提高查询效率和用户体验,避免一次性加载过多数据导致性能下降。...
例如,当用户在第一个级联列表中选择一个选项时,PHP会根据这个选项查询数据库,获取与之关联的下一级选项,然后将这些数据发送回前端。 2. jQuery:jQuery是一个快速、简洁的JavaScript库,简化了HTML文档遍历、...
虽然描述部分为空,但根据给定的博文链接,我们可以推测文章可能详细解释了Hibernate中的级联查询概念,可能包括实际应用示例和源码解析。博主可能通过具体的例子展示了如何配置和使用级联查询,以及可能遇到的问题...
总结来说,这个案例涉及的技术点包括SSH框架的使用、数据库设计与级联查询、Ajax和JQuery的交互以及前端动态更新。通过这个案例,开发者可以学习到如何将后端数据与前端界面有效地结合,提高用户体验,同时也加深了...
利用javascript+json实现级联查询
全国省、市/区、县、街道四级级联Mysql数据是用于构建具有地理信息的数据库的重要资源。这种数据集通常包含中国所有省份、直辖市、自治区、地级市、区县以及乡镇(部分包括街道)的详细行政划分信息。在IT行业中,这...
2015年最新最全的省市区街道级联查询
"Ajax+SSH实现省份城市级联查询"是一个典型的示例,展示了如何利用这些技术提高用户体验,减少服务器负载。在此,我们将深入探讨Ajax、Spring、Hibernate和Struts2这四个关键技术以及它们在实现级联查询中的作用。 ...
在IT领域,动态实现下拉列表框的三级级联查询是一项常见的前端交互功能,它能够为用户提供更加便捷的导航和筛选体验。在这个场景中,我们使用JSP(JavaServer Pages)脚本语言来实现这一功能。JSP是Java平台上的...
本项目围绕“级联查询”和“商品上下架审核”这两个核心功能进行阐述,旨在提供一个可以直接使用的小型项目模板,适合初学者理解和实践。 首先,级联查询是数据库操作中的一个重要概念,尤其是在复杂业务场景下。在...
省市区sql文件 单表
行政区域级联查询js,可引用至网页。。
在本文中,我们将深入探讨如何使用JSP、JSON和MySQL来实现一个二级级联下拉菜单。这个功能常用于网站的表单设计中,让用户能够从相关联的分类中选择选项,例如省份与城市的选择。 首先,让我们了解这三个技术的核心...
文件包括了:项目工程(关键部分注解详细),以及sql文件。功能:选中第一个下拉框,局部刷新第二个下拉框的值,且每次选中第一个下拉框,第二个下拉框都会有对应的值提供选择。主要使用了MySQL,jdbc,servlet,jsp...
"MySQL 中利用外键实现级联删除、更新" 在 MySQL 中,外键是指在一个表中的一列或多列,引用另一个表中的主键或唯一索引。外键可以强制实施数据的一致性和完整性,使得数据更加可靠。外键在 MySQL 中的实现主要是...
DB2跨库级联查询的优点主要体现在以下两个方面:一方面,它能够解决在数据量很大且差异数很小的情况下,通过查询结果后还需要在Excel或统一环境下手动处理数据所带来的痛苦和低效问题;另一方面,它提高了数据查询的...
"级联失效代码"是实际的程序源码,可能包括了各种算法,如故障传播模型、网络拓扑分析、负载平衡策略等,以模拟不同条件下的失效传播。"级联失效算法"则是指用于预测和控制级联失效的特定方法,这些算法通常基于数学...
总结来说,使用jQuery实现ajax二级级联查询涉及的关键技术包括:jQuery的`$.ajax()`方法用于异步请求,XML作为数据传输格式,以及jQuery的DOM操作方法来处理响应数据。这个过程提高了用户体验,减少了不必要的页面...