`

MYSQL级联查询,包括向上向下的级联

 
阅读更多
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级联更新和级联删除

    MySQL的InnoDB存储引擎支持多种不同的处理外键的方式,包括级联更新(Cascade Update)和级联删除(Cascade Delete)。本文将深入探讨这两种机制及其在MySQL中的实现方式。 #### 一、基本概念 **级联更新(Cascade ...

    最新最完整的中英法文ISO3166世界行政区划MySQL级联表------18

    最新最完整的中英法文ISO3166世界行政区划MySQL级联表,包含中国

    java级联查询、分页查询

    在Java编程中,级联查询和分页查询是数据库操作中的常见需求,特别是在处理大量数据时。级联查询用于获取一个实体的相关实体信息,而分页查询则用于提高查询效率和用户体验,避免一次性加载过多数据导致性能下降。...

    php+juqery+mysql级联列表

    例如,当用户在第一个级联列表中选择一个选项时,PHP会根据这个选项查询数据库,获取与之关联的下一级选项,然后将这些数据发送回前端。 2. jQuery:jQuery是一个快速、简洁的JavaScript库,简化了HTML文档遍历、...

    hibernate 级联查询

    虽然描述部分为空,但根据给定的博文链接,我们可以推测文章可能详细解释了Hibernate中的级联查询概念,可能包括实际应用示例和源码解析。博主可能通过具体的例子展示了如何配置和使用级联查询,以及可能遇到的问题...

    SSH+JQuery+MySQL级联操作(省市县级联)

    总结来说,这个案例涉及的技术点包括SSH框架的使用、数据库设计与级联查询、Ajax和JQuery的交互以及前端动态更新。通过这个案例,开发者可以学习到如何将后端数据与前端界面有效地结合,提高用户体验,同时也加深了...

    javascript+json实现级联查询

    利用javascript+json实现级联查询

    全国省、市/区、县、街道四级级联Mysql数据

    全国省、市/区、县、街道四级级联Mysql数据是用于构建具有地理信息的数据库的重要资源。这种数据集通常包含中国所有省份、直辖市、自治区、地级市、区县以及乡镇(部分包括街道)的详细行政划分信息。在IT行业中,这...

    2015最新的省市区街道级联查询

    2015年最新最全的省市区街道级联查询

    ajax+ssh实现省份城市级联查询

    "Ajax+SSH实现省份城市级联查询"是一个典型的示例,展示了如何利用这些技术提高用户体验,减少服务器负载。在此,我们将深入探讨Ajax、Spring、Hibernate和Struts2这四个关键技术以及它们在实现级联查询中的作用。 ...

    动态实现下拉列表框三级级联查询

    在IT领域,动态实现下拉列表框的三级级联查询是一项常见的前端交互功能,它能够为用户提供更加便捷的导航和筛选体验。在这个场景中,我们使用JSP(JavaServer Pages)脚本语言来实现这一功能。JSP是Java平台上的...

    ssm级联查询、上下架审核

    本项目围绕“级联查询”和“商品上下架审核”这两个核心功能进行阐述,旨在提供一个可以直接使用的小型项目模板,适合初学者理解和实践。 首先,级联查询是数据库操作中的一个重要概念,尤其是在复杂业务场景下。在...

    省市区sql文件 单表 支持级联查询

    省市区sql文件 单表

    行政区域级联查询

    行政区域级联查询js,可引用至网页。。

    DB2跨库级联查询.docx

    DB2 跨库级联查询的优点是可以解决数据量很大且差异数很小的情况下,通过查询结果,然后找 excel 或 ue 上手动处理的痛苦和低效的问题,提高了数据查询的效率和accuracy。 DB2 跨库级联查询的应用场景有很多,...

    jsp+json+mySql 实现二级级联下拉菜单

    在本文中,我们将深入探讨如何使用JSP、JSON和MySQL来实现一个二级级联下拉菜单。这个功能常用于网站的表单设计中,让用户能够从相关联的分类中选择选项,例如省份与城市的选择。 首先,让我们了解这三个技术的核心...

    Ajax下拉框级联查询(JDBC+Servlet+XMLHttpRequest异步对象)

    文件包括了:项目工程(关键部分注解详细),以及sql文件。功能:选中第一个下拉框,局部刷新第二个下拉框的值,且每次选中第一个下拉框,第二个下拉框都会有对应的值提供选择。主要使用了MySQL,jdbc,servlet,jsp...

    MySQL中利用外键实现级联删除、更新

    "MySQL 中利用外键实现级联删除、更新" 在 MySQL 中,外键是指在一个表中的一列或多列,引用另一个表中的主键或唯一索引。外键可以强制实施数据的一致性和完整性,使得数据更加可靠。外键在 MySQL 中的实现主要是...

    cas.rar_MATLAB 级联失效_级联_级联失效 代码_级联失效代码_级联失效算法

    "级联失效代码"是实际的程序源码,可能包括了各种算法,如故障传播模型、网络拓扑分析、负载平衡策略等,以模拟不同条件下的失效传播。"级联失效算法"则是指用于预测和控制级联失效的特定方法,这些算法通常基于数学...

    Jquery实现ajax二级级联查询

    总结来说,使用jQuery实现ajax二级级联查询涉及的关键技术包括:jQuery的`$.ajax()`方法用于异步请求,XML作为数据传输格式,以及jQuery的DOM操作方法来处理响应数据。这个过程提高了用户体验,减少了不必要的页面...

Global site tag (gtag.js) - Google Analytics