arraypress/edd-extended-query

增强Easy Digital Downloads (EDD) 数据库查询功能,支持SQL聚合函数(SUM、AVG、MAX等)和算术运算,使WordPress和PHP项目中的复杂数据分析和处理成为可能。

dev-main 2024-05-20 19:55 UTC

This package is auto-updated.

Last update: 2024-09-20 20:49:12 UTC


README

此类通过引入执行SUM、AVG、MAX、MIN等高级SQL聚合操作的能力,显著增强了Easy Digital Downloads (EDD)的查询功能。它通过基础EDD查询类,与BerlinDB的ORM功能相辅相成,简化了复杂数学查询,丰富了数据分析和处理任务。

功能

  • 高级SQL聚合:将SQL聚合函数(SUM、AVG、MAX、MIN、GROUP_CONCAT、STDDEV、VAR_SAMP、VAR_POP)纳入EDD查询中,实现深入的数据汇总和分析。

  • 算术运算支持:允许在查询中直接使用加、减、乘、除等运算符执行算术运算,简化数据库查询中的复杂计算。

  • 数值列类型支持:提供一系列支持的数值SQL列类型,包括tinyint、smallint、mediumint、int、bigint、decimal、numeric、float、double、bit和real,实现精确的数据处理。

  • 增强的分组能力:允许使用GROUP BY子句在单个查询请求中聚合多个总和(SUM)、平均值(AVG)和其他计算,针对不同的字段。该功能简化了数据分组和汇总,为数据集提供强大的见解,同时降低开销。

  • 全面文档:附带详细的文档和用法示例,使开发者能够轻松实现并利用其在项目中的高级功能。

最低要求

  • PHP 7.4

安装

扩展查询是一个开发者库,不是插件,这意味着您需要在您的项目中包含它。

您可以使用Composer

composer require arraypress/edd-extended-query

基本用法

// Require the Composer autoloader to enable class autoloading.
require_once __DIR__ . '/vendor/autoload.php';

此类特别设计为作为基础,使开发者能够根据特定的数据检索和处理需求,在其Easy Digital Downloads (EDD)扩展或相关项目中扩展和定制自己的自定义查询类。通过从Extended_Query类继承,您可以轻松创建针对应用程序不同方面的专业查询处理程序,例如管理自定义任务请求。

以下是一个如何扩展Extended_Query类以构建自定义任务请求查询处理程序的示例。

use ArrayPress\Utils\EDD\Database\Extended_Query;

/**
 * Extends the `Extended_Query` class to manage custom task requests.
 */
class Task_Requests extends Extended_Query {

    /**
     * Database table name.
     *
     * @var string
     */
    protected $table_name = 'task_requests';

    /**
     * Database table alias.
     *
     * @var string
     */
    protected $table_alias = 'tr';

    /**
     * Schema class for database structure.
     *
     * @var string
     */
    protected $table_schema = '\\ArrayPress\\EDD\\Tasks\\Database\\Schemas\\Task_Requests';

    /**
     * Singular item name.
     *
     * @var string
     */
    protected $item_name = 'task_request';

    /**
     * Plural items name.
     *
     * @var string
     */
    protected $item_name_plural = 'task_requests';

    /**
     * Class for item objects.
     *
     * @var string
     */
    protected $item_shape = '\\ArrayPress\\EDD\\Tasks\\Objects\\Task_Request';

    /**
     * Cache group name.
     *
     * @var string
     */
    protected $cache_group = 'task_requests';

    /**
     * Constructor to set up query parameters.
     *
     * @param array|string $query Query parameters.
     */
    public function __construct( $query = [] ) {
        parent::__construct( $query );
    }
}

示例1:简单的聚合查询

计算特定产品ID的销售总额。

$query = new Task_Transactions([
    'function'   => 'SUM',
    'fields'     => 'amount',
    'product_id' => 123 // Assuming product ID is 123
]);

$total_sales = $query->get_result();
支持的聚合函数
  • SUM:计算一组值的总和。用于查找总金额,如总销售额。
  • AVG:计算一组值的平均值。用于确定平均交易规模或平均折扣。
  • MAX:在一组值中找到最大值。用于查找最大的交易金额或最高的折扣。
  • MIN:在一组值中找到最小值。用于识别最小的交易或售价最低的商品。
  • GROUP_CONCAT: 将多行值连接成单个字符串。这特别适用于聚合基于文本的数据,如合并标签或类别。
  • STDDEV: 计算一组值的标准差,有助于了解数据点(如交易金额)的方差。
  • VAR_SAMP: 计算一组值的样本方差,提供从总体中样本变异性的见解。
  • VAR_POP: 计算一组值的总体方差,提供对整个总体变异性的视图。

示例 2:带有算术运算的聚合函数

通过从销售额中减去税款来计算总利润。

$query = new Task_Transactions([
    'function' => 'SUM',
    'fields'   => ['amount', 'tax'],
    'operator' => '-' // Subtracting discount from amount
]);

$total_profit = $query->get_result();
支持的聚合函数

+, -, *, /, %

示例 3:按产品 ID 分组

按产品 ID 计算总销售额。

$query = new Task_Transactions([
    'function' => 'SUM',
    'fields'   => 'amount',
    'groupby'  => ['product_id']
]);

$sales_by_product = $query->get_result();

示例 4:按多列分组

按产品 ID 计算总销售额。

$query = new Task_Transactions([
    'function' => 'AVG',
    'fields'   => ['amount', 'discount']
    'groupby'  => ['product_id']
]);

$sales_by_product = $query->get_result();

贡献

对这个库的贡献非常受重视。在 GitHub 上提出问题或提交拉取请求以修复错误或添加新功能。分享反馈和建议以供改进。

许可证:GPLv2 或更高版本

本程序是自由软件;您可以在自由软件基金会发布的 GNU 通用公共许可证的条款下重新分发和/或修改它;许可证的第 2 版,或者(根据您的选择)任何更高版本。

本程序的分发是希望它将是有用的,但没有任何保证;甚至没有对适销性或特定用途适用性的暗示保证。有关详细信息,请参阅 GNU 通用公共许可证。