热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mysql使用自定义方法,以及cakephp分页使用join查询的方法

Mysql使用自定义方法,以及cakephp分页使用join查询的方法

第一步:设置SET GLOBAL log_bin_trust_function_creators=TRUE;
如果报ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)这种错误

第二步:

Sql代码  收藏代码
  1. DELIMITER $$   
  2.   
  3. USE `zhiku`$$   
  4.   
  5. DROP FUNCTION IF EXISTS `getChildDept`$$   
  6.   
  7. CREATE  FUNCTION `getChildDept`(rootId INTRETURNS TEXT CHARSET utf8   
  8. BEGIN  
  9.     DECLARE sTemp VARCHAR(1000);   
  10.     DECLARE sTempChd VARCHAR(1000);   
  11.     SET sTemp = '$';   
  12.     SET sTempChd =CAST(rootId AS CHAR);   
  13.     WHILE sTempChd IS NOT NULL DO   
  14.         SET sTemp = CONCAT(sTemp,',',sTempChd);   
  15.         SELECT GROUP_CONCAT(id) INTO sTempChd FROM zk_departments WHERE FIND_IN_SET(parent_id,sTempChd)>0;   
  16.     END WHILE;   
  17.     RETURN sTemp;   
  18.     END$$   
  19. DELIMITER ;  
DELIMITER $$

USE `zhiku`$$

DROP FUNCTION IF EXISTS `getChildDept`$$

CREATE  FUNCTION `getChildDept`(rootId INT) RETURNS TEXT CHARSET utf8
BEGIN
	DECLARE sTemp VARCHAR(1000);
	DECLARE sTempChd VARCHAR(1000);
	SET sTemp = '$';
	SET sTempChd =CAST(rootId AS CHAR);
	WHILE sTempChd IS NOT NULL DO
		SET sTemp = CONCAT(sTemp,',',sTempChd);
		SELECT GROUP_CONCAT(id) INTO sTempChd FROM zk_departments WHERE FIND_IN_SET(parent_id,sTempChd)>0;
	END WHILE;
	RETURN sTemp;
    END$$
DELIMITER ;

 

第三步:直接调用
SELECT DISTINCT(d.user_id) AS user_id,d.dept_id,u.compellation FROM zk_user_departments d INNER JOIN zk_users u ON u.id=d.user_id  AND  INSTR(u.pinyin,'h')=2 WHERE FIND_IN_SET(d.dept_id, getChildDept(128)) GROUP BY d.user_id;

放在cakephp为:

Php代码  收藏代码
  1. $conditions = array('FIND_IN_SET(dept_id, getChildDept('.$dept_id.'))');   
  2.             $condition_join = '`User`.`id` = `UserDepartment`.`user_id`';   
  3.             if(!emptyempty($c))$condition_join  .= ' AND INSTR(User.pinyin,"'.$c.'")=2';   
  4.             //分页   
  5.             $this->paginate = array(   
  6.                     'UserDepartment' => array(   
  7.                             'conditions' => $conditions,   
  8.                             'order'      => array('dept_id'=>'ASC'),   
  9.                             'limit'      => 10,   
  10.                             'recursive'  => -1,   
  11.                             'group'      => array('user_id'),   
  12.                             'fields'     => array('user_id','dept_id'),   
  13.                             'joins'      => array(array(   
  14.                                                  'alias' => 'User',   
  15.                                                  'table' => 'zk_users',   
  16.                                                  'type' => 'INNER',   
  17.                                                  'conditions' => $condition_join,   
  18.                                             )),   
  19.                     )   
  20.             );   
  21.             $data = $this->paginate('UserDepartment');  
$cOnditions= array('FIND_IN_SET(dept_id, getChildDept('.$dept_id.'))');
			$condition_join = '`User`.`id` = `UserDepartment`.`user_id`';
        	if(!empty($c))$condition_join  .= ' AND INSTR(User.pinyin,"'.$c.'")=2';
        	//分页
			$this->paginate = array(
                	'UserDepartment' => array(
                    	    'conditions' => $conditions,
                   	     	'order'      => array('dept_id'=>'ASC'),
                  	      	'limit'      => 10,
                        	'recursive'  => -1,
        					'group'		 => array('user_id'),
        					'fields'     => array('user_id','dept_id'),
							'joins'      => array(array(
												 'alias' => 'User',
            									 'table' => 'zk_users',
            									 'type' => 'INNER',
												 'conditions' => $condition_join,
											)),
                	)
        	);
        	$data = $this->paginate('UserDepartment');
 

 

 


推荐阅读
  • 根据最新发布的《互联网人才趋势报告》,尽管大量IT从业者已转向Python开发,但随着人工智能和大数据领域的迅猛发展,仍存在巨大的人才缺口。本文将详细介绍如何使用Python编写一个简单的爬虫程序,并提供完整的代码示例。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 在使用SQL Server进行动态SQL查询时,如果遇到LIKE语句无法正确返回预期结果的情况,通常是因为参数传递方式不当。本文将详细探讨这一问题,并提供解决方案及相关的技术背景。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 本文详细介绍了 MySQL 中 LAST_INSERT_ID() 函数的使用方法及其工作原理,包括如何获取最后一个插入记录的自增 ID、多行插入时的行为以及在不同客户端环境下的表现。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 深入理解父组件与子组件的引用和访问
    本文详细介绍了如何在Vue.js中通过$children和$refs属性实现父组件对子组件的访问,并提供了具体的代码示例及最佳实践。 ... [详细]
  • LeetCode 540:有序数组中的唯一元素
    来源:力扣(LeetCode),链接:https://leetcode-cn.com/problems/single-element-in-a-sorted-array。题目要求在仅包含整数的有序数组中,找到唯一出现一次的元素,并确保算法的时间复杂度为 O(log n) 和空间复杂度为 O(1)。 ... [详细]
  • 如何在Faceu激萌中设置和使用妆容切换特效?
    本文将详细介绍如何在Faceu激萌应用中设置和使用妆容切换特效,帮助用户轻松实现创意拍摄。无论是新手还是有经验的用户,都能从中受益。 ... [详细]
author-avatar
手机用户2602939201
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有