封装MySQL操作时Where条件语句的组织

2024-09-08 14:38

本文主要是介绍封装MySQL操作时Where条件语句的组织,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。

条件语句大致分为以下几种:
1、单一条件,比如:where id = 1;
2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60;
3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND score < 60;
因为多数情况下,多个条件之间的逻辑都是AND的关系,所以我们默认如此。
条件数组构造:

$where = array('id'  => array('>', 10),'age' => array('>', 20),
);

如果条件语句属于前两种,我们便可以使用上述方式,即:将条件语句中字段作为$where数组的键,将操作符(> < = in like)以及对应的值以数组的方式作为字段对应的值。
封装类中处理代码:

function whereParse($data) {$str = '';foreach ($data $key => $value) {$sign = $value[0];$where = $value[1];if($sign == 'in') {$where = implode("','", $where);$str .= "$key in ('$where') and ";} else {if(is_numeric($where)) {$str .= "$key $sign $where and ";} else {$str .= "$key $sign '$where' and ";}}}$str = substr($str, 0, -4);return $str;
}

一开始不知道第三种该如何去操作,之后借鉴了ThinkPHP框架中对于数据库的封装中对Where条件语句的操作之后,发现他们是这样做的。
使用下述SQL语句作为例子:

SELECT * FROM table WHERE (id > 10 OR age > 20) AND score < 60;

在ThinkPHP中,选择将逻辑关系为OR的两个条件放在键名为 _complex 的数组元素中。

$where['_complex'] = array('id'  => array('>', 10),'age' => array('>', 20),
);

而他们之间的逻辑关系,ThinkPHP将其放在键名为 _logic 的数组元素中。

$where['_logic'] = 'OR';

而余下的逻辑关系为与的只需要用_complex元素内的方式在where中组织即可。

$where['score'] = array('<', 60);

这样当我们去处理条件语句时,首先判断条件数组中是否存在_complex键名,如果存在,就将_complex中的元素与_logic中的逻辑关系进行组合,完成后,将逻辑AND的其他数据组合即可.

/*** 对条件语句进行解析*/
function whereParse($data) {if(array_key_exists('_complex', $data)) {$complex = parse($data['_complex'], $data['_logic']);}unset($data['_complex']);unset($data['_logic']);$str = parse($data) . " AND " . $complex;return $str;
}
/*** 对单一关系进行解析*/
function parse($data, $relation = '') {$str = '(';if(empty($relation)) {$relation = 'AND';}foreach ($data as $key => $value) {$sign = $value[0];$where = $value[1];if($sign == 'in') {$where = implode("','", $where);$str .= "$key in ('$where') $relation ";} else {if(is_numeric($where)) {$str .= "$key $sign $where $relation ";} else {$str .= "$key $sign '$where' $relation ";}}}$str = substr($str, 0, -4);$str .= ')';return $str;
}

然后我们调用上述函数:

echo whereParse($where);
// 输出:
(score < 60 ) AND (id > 10 OR age > 20)

其实还有一种更为复杂的条件语句,形如:(id > 10 OR age > 20) AND (score < 60 OR phone like 135%);
上述情况并未对此进行处理,之后再谈。

http://www.2liang.me/archives/216

这篇关于封装MySQL操作时Where条件语句的组织的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148387

相关文章

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

Mac电脑如何通过 IntelliJ IDEA 远程连接 MySQL

《Mac电脑如何通过IntelliJIDEA远程连接MySQL》本文详解Mac通过IntelliJIDEA远程连接MySQL的步骤,本文通过图文并茂的形式给大家介绍的非常详细,感兴趣的朋友跟... 目录MAC电脑通过 IntelliJ IDEA 远程连接 mysql 的详细教程一、前缀条件确认二、打开 ID