PHPackages                             megawilddaddy/simple-pdo-query-builder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. megawilddaddy/simple-pdo-query-builder

ActiveSymfony-bundle[Database &amp; ORM](/categories/database)

megawilddaddy/simple-pdo-query-builder
======================================

Simple PDO Query Builder

1.5(4y ago)02.6k1MITPHPPHP &gt;=7.1

Since Nov 15Pushed 4y ago1 watchersCompare

[ Source](https://github.com/megawilddaddy/SimplePdoQueryBuilder)[ Packagist](https://packagist.org/packages/megawilddaddy/simple-pdo-query-builder)[ RSS](/packages/megawilddaddy-simple-pdo-query-builder/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (9)DependenciesVersions (9)Used By (0)

SimplePdoQueryBuilder
=====================

[](#simplepdoquerybuilder)

Simple PDO Query Builder. Useful to generate low level queries with ease.

1. Installation

    composer require megawilddaddy/simple-pdo-query-builder
2. Usage

```
SELECT
  CONCAT(p.firstName, ' ', p.lastName) as partnerName,
  m.fullName as managerName,
  c.country, c.partnerId,
  c.managerId,
  CONCAT(c.firstName, ' ', c.lastName) as fullName,
  a.group_name as groupName,
  a.id as userId,
  e.login AS login,
  p.lastDepositDate, p.lastWithdrawalDate,
  IFNULL(s.balance, 0) AS startingBalance,
  IFNULL(e.balance, 0) AS endingBalance,
  IFNULL(p.deposits - withdrawalRefunds, 0) AS deposits,
  IFNULL(p.withdrawals + withdrawalRefunds - tc, 0) AS withdrawals,
  IFNULL(p.withdrawalRefunds, 0) AS withdrawalRefunds, IFNULL(p.deposits + p.withdrawals - tc, 0) AS netDeposits,
  IFNULL(p.nbc, 0) AS nbc, IFNULL(p.pl, 0) AS pl,
  a.agent_account as agentAccount,
  IFNULL(swaps, 0) as swaps, IFNULL(e.bonusBalance, 0) as bonusBalance,
  IFNULL(commission, 0) as commission, IFNULL(it, 0) as it,
  IFNULL(vendorDeposits, 0) as vendorDeposits,
  IFNULL(vendorWithdrawals + withdrawalRefunds, 0) as vendorWithdrawals,
  IFNULL(clientProfit + tc, 0) as clientProfit, IFNULL(clientLoss, 0) as clientLoss,
  IFNULL(bonus, 0) as bonus,
  IFNULL(ibCommission, 0) as ibCommission, IFNULL(e.endFloatingPL, 0) as endFloatingPL,
  IFNULL(p.credit, 0) AS credit, IFNULL(s.balance, 0) AS startingBalance, IFNULL(e.balance, 0) AS endingBalance,
  IF(LEFT(a.GROUP_NAME, 1) = 'S', 'SV', 'CY') as broker,
  IFNULL((-1 * (p.withdrawals + p.deposits - p.tc) - GREATEST(0, IFNULL(s.balance, 0)) + GREATEST(0, IFNULL(e.balance, 0)) + IFNULL(p.nbc, 0) + tc), 0) AS clientPL,
  a.group_name AS group_name,
  CASE WHEN SUBSTR(a.group_name, 2, 1) = 'E' THEN 'EUR' ELSE 'USD' END AS currency, IFNULL(a.equity, 0) AS equity,
  IFNULL(p.pl / p.deposits * 100, 0) AS plFixed,
  IF(a.group_name IN ('SUBS4P', 'SUBS5P'), (a.equity - a.credit)/a.credit*100,
  (a.equity - a.credit - p.deposits - p.withdrawals + p.tc) / p.deposits * 100) AS equityPerformance,
  ABS(ROUND((e.balance - s.balance - vendorDeposits - vendorWithdrawals - it - clientProfit - clientLoss - swaps - commission - nbc - ibCommission - withdrawalRefunds - tc), 2)) as checksum
FROM

    (SELECT
        t.login, ROUND(SUM(CASE WHEN t.cmd IN (0,1) AND close_time = '1970-01-01 00:00:00' THEN t.profit ELSE 0 END), 2) AS endFloatingPL,
        ROUND(SUM(CASE WHEN t.cmd =7 THEN t.profit ELSE 0 END), 2) AS bonusBalance,
        ROUND(SUM(CASE WHEN t.cmd = 6 AND close_time != '1970-01-01 00:00:00' THEN t.profit ELSE 0 END) + SUM(CASE WHEN t.cmd IN (0,1) AND close_time != '1970-01-01 00:00:00' THEN t.profit + t.swaps + t.commission ELSE 0 END), 2) AS balance
    FROM
        test_trades t WHERE t.sid = 2 AND t.close_time  0 AND LEFT(comment, 2) = 'D-' THEN t.close_time ELSE null END) AS lastDepositDate, MAX(CASE WHEN t.cmd = 6 AND profit < 0 AND LEFT(comment, 2) = 'W-' THEN t.close_time ELSE null END) AS lastWithdrawalDate, ROUND(SUM(CASE WHEN t.cmd = 6 AND profit > 0 AND LEFT(comment, 2) = 'D-' THEN t.profit ELSE 0 END), 2) AS vendorDeposits, ROUND(SUM(CASE WHEN t.cmd = 6 AND profit < 0 AND LEFT(comment, 2) = 'W-' THEN t.profit ELSE 0 END), 2) AS vendorWithdrawals, ROUND(SUM(CASE WHEN t.cmd IN (6,7) AND LEFT(comment, 2) IN ('IT', 'PC', 'CP') THEN t.profit ELSE 0 END), 2) AS it, ROUND(SUM(CASE WHEN t.cmd IN (0,1) AND profit > 0 THEN t.profit ELSE 0 END), 2) AS clientProfit, ROUND(SUM(CASE WHEN t.cmd IN (0,1) AND profit < 0 THEN t.profit ELSE 0 END), 2) AS clientLoss, ROUND(SUM(CASE WHEN t.cmd = 6 AND profit > 0 THEN t.profit ELSE 0 END), 2) AS deposits, ROUND(SUM(CASE WHEN t.cmd = 6 AND profit < 0 THEN t.profit ELSE 0 END), 2) AS withdrawals, ROUND(SUM(CASE WHEN t.cmd = 6 AND LEFT(comment, 2) = 'TC' THEN t.profit ELSE 0 END), 2) AS tc, ROUND(SUM(CASE WHEN t.cmd = 6 AND profit > 0 AND RIGHT(COMMENT, 3) = 'DEC' THEN t.profit ELSE 0 END), 2) AS withdrawalRefunds, ROUND(SUM(CASE WHEN t.cmd = 7 THEN t.profit ELSE 0 END), 2) AS credit, ROUND(SUM(CASE WHEN t.comment IN ('DEPOSIT-NBC', 'ZERO-BALANCE') THEN t.profit ELSE 0 END), 2) AS nbc, ROUND(SUM(CASE WHEN t.cmd IN (0,1) AND close_time != '1970-01-01 00:00:00' THEN t.profit + t.swaps + t.commission ELSE 0 END), 2) AS pl, ROUND(SUM(CASE WHEN t.close_time != '1970-01-01 00:00:00' THEN t.swaps ELSE 0 END), 2) AS swaps, ROUND(SUM(CASE WHEN t.close_time != '1970-01-01 00:00:00' THEN t.commission ELSE 0 END), 2) AS commission, ROUND(SUM(CASE WHEN t.cmd = 7 THEN t.profit ELSE 0 END), 2) AS bonus, ROUND(SUM(CASE WHEN LEFT(commHent, 5) IN ('agent', 'COMMI') THEN t.profit ELSE 0 END), 2) as ibCommission
    FROM
        test_trades t WHERE t.sid = 2 AND t.close_time BETWEEN '2015-05-07 00:00:00' AND '2015-05-09 00:00:00'
    GROUP BY
        t.login) as p ON e.login = p.login

JOIN
     test_users a ON a.login = e.login AND a.sid = 2
JOIN
     users c ON c.id = a.id
LEFT JOIN
    managers m ON m.id = c.managerId
LEFT JOIN
     users p ON p.id = c.partnerId
HAVING
    fullName NOT LIKE '%test%' AND groupName NOT LIKE '%7P%' AND groupName NOT LIKE '%4P%'
ORDER BY
    login ASC
```

```
$qb = new SimplePDOQueryBuilder();

$sQ = $qb->subQuery('s')
    ->select("t.login, ROUND(SUM(CASE WHEN t.cmd = 6 THEN t.profit ELSE 0 END) + SUM(CASE WHEN t.cmd IN (0,1) AND close_time != '1970-01-01 00:00:00' THEN t.profit + t.swaps + t.commission ELSE 0 END), 2) AS balance")
    ->from('test_trades t')
    ->where('t.sid = 2')
    ->where("t.close_time BETWEEN '1980-01-01 00:00:00' AND '{$from->format('Y-m-d H:i:00')}'")
    ->group('t.login')
;

$eQ = $qb->subQuery('e')
    ->select("t.login,
        ROUND(SUM(CASE WHEN t.cmd IN (0,1) AND close_time = '1970-01-01 00:00:00' THEN t.profit ELSE 0 END), 2) AS endFloatingPL,
        ROUND(SUM(CASE WHEN t.cmd =7 THEN t.profit ELSE 0 END), 2) AS bonusBalance,
        ROUND(SUM(CASE WHEN t.cmd = 6 AND close_time  != '1970-01-01 00:00:00' THEN t.profit ELSE 0 END) + SUM(CASE WHEN t.cmd IN (0,1) AND close_time != '1970-01-01 00:00:00' THEN t.profit + t.swaps + t.commission ELSE 0 END), 2) AS balance
")
    ->from('test_trades t')
    ->where('t.sid = 2')
    ->where(" t.close_time  0 AND LEFT(comment, 2) = 'D-' THEN t.close_time ELSE null END) AS lastDepositDate,
        MAX(CASE WHEN t.cmd = 6 AND profit < 0 AND LEFT(comment, 2) = 'W-' THEN t.close_time ELSE null END) AS lastWithdrawalDate,
        ROUND(SUM(CASE WHEN t.cmd = 6 AND profit > 0 AND LEFT(comment, 2) = 'D-' THEN t.profit ELSE 0 END), 2) AS vendorDeposits,
        ROUND(SUM(CASE WHEN t.cmd = 6 AND profit < 0 AND LEFT(comment, 2) = 'W-' THEN t.profit ELSE 0 END), 2) AS vendorWithdrawals,
        ROUND(SUM(CASE WHEN t.cmd IN (6,7) AND LEFT(comment, 2) IN ('IT', 'PC', 'CP') THEN t.profit ELSE 0 END), 2) AS it,
        ROUND(SUM(CASE WHEN t.cmd IN (0,1) AND profit > 0 THEN t.profit ELSE 0 END), 2) AS clientProfit,
        ROUND(SUM(CASE WHEN t.cmd IN (0,1) AND profit < 0 THEN t.profit ELSE 0 END), 2) AS clientLoss,
        ROUND(SUM(CASE WHEN t.cmd = 6 AND profit > 0 THEN t.profit ELSE 0 END), 2) AS deposits,
        ROUND(SUM(CASE WHEN t.cmd = 6 AND profit < 0 THEN t.profit ELSE 0 END), 2) AS withdrawals,
        ROUND(SUM(CASE WHEN t.cmd = 6 AND LEFT(comment, 2) = 'TC' THEN t.profit ELSE 0 END), 2) AS tc,
        ROUND(SUM(CASE WHEN t.cmd = 6 AND profit > 0 AND RIGHT(COMMENT, 3) = 'DEC' THEN t.profit ELSE 0 END), 2) AS withdrawalRefunds,
        ROUND(SUM(CASE WHEN t.cmd = 7 THEN t.profit ELSE 0 END), 2) AS credit,
        ROUND(SUM(CASE WHEN t.comment IN ('DEPOSIT-NBC', 'ZERO-BALANCE') THEN t.profit ELSE 0 END), 2) AS nbc,
        ROUND(SUM(CASE WHEN t.cmd IN (0,1) AND close_time != '1970-01-01 00:00:00' THEN t.profit + t.swaps + t.commission ELSE 0 END), 2) AS pl,
        ROUND(SUM(CASE WHEN t.close_time != '1970-01-01 00:00:00' THEN t.swaps ELSE 0 END), 2) AS swaps,
        ROUND(SUM(CASE WHEN t.close_time != '1970-01-01 00:00:00' THEN t.commission ELSE 0 END), 2) AS commission,
        ROUND(SUM(CASE WHEN t.cmd = 7 THEN t.profit ELSE 0 END), 2) AS bonus,
        ROUND(SUM(CASE WHEN LEFT(comment, 5) IN ('agent', 'COMMI') THEN t.profit ELSE 0 END), 2) as ibCommission
    ")
    ->from('test_trades t')
    ->where('t.sid = 2')
    ->where("t.close_time BETWEEN '{$from->format('Y-m-d H:i:00')}' AND '{$to->format('Y-m-d H:i:00')}'")
    ->group('t.login');

$mQ = $qb->create();

if (!empty($filters['login'])) {
    $mQ->where($sQ->expr()->in('a.login', $filters['login']));
    $sQ->where($sQ->expr()->in('t.login', $filters['login']));
    $eQ->where($eQ->expr()->in('t.login', $filters['login']));
    $pQ->where($pQ->expr()->in('t.login', $filters['login']));
}
if (!empty($filters['book'])) {
    $mQ->where("SUBSTR(a.group_name, 3, 1) = '{$filters['book']}'");
}
if (!empty($filters['partnerId'])) {
    $mQ->where("c.partnerId = {$filters['partnerId']}");
}
if (!empty($filters['clientId'])) {
    $mQ->where("c.id = {$filters['clientId']}");
}
if (!empty($filters['company'])) {
    $mQ->where(" SUBSTR(a.group_name, 1, 1) = '{$filters['company']}' ");
}
if (!empty($filters['agentAccount'])) {
    $mQ->where("a.AGENT_ACCOUNT = '{$filters['agentAccount']}'");
}
if (!empty($filters['group'])) {
    $mQ->where($mQ->expr()->in('a.group_name', $filters['group']));
}
if (!empty($filters['sortBy'])) {
    $mQ->orderBy($filters['sortBy'], $filters['sortDir']);
}

$mQ->select("
       CONCAT(p.firstName, ' ', p.lastName) as partnerName,
       m.fullName as managerName,
       c.country,
       c.partnerId,
       c.managerId,
       CONCAT(c.firstName, ' ', c.lastName) as fullName,
       a.group_name as groupName,
       a.id as userId,
       e.login AS login,
       p.lastDepositDate,
       p.lastWithdrawalDate,
       IFNULL(s.balance, 0) AS startingBalance,
       IFNULL(e.balance, 0) AS endingBalance,
       IFNULL(p.deposits - withdrawalRefunds, 0)  AS deposits,
       IFNULL(p.withdrawals + withdrawalRefunds - tc, 0)  AS withdrawals,
       IFNULL(p.withdrawalRefunds, 0)  AS withdrawalRefunds,
       IFNULL(p.deposits + p.withdrawals - tc, 0) AS netDeposits,
       IFNULL(p.nbc, 0) AS nbc,
       IFNULL(p.pl, 0) AS pl,
       a.agent_account as agentAccount,
       IFNULL(swaps, 0) as swaps,
       IFNULL(e.bonusBalance, 0) as bonusBalance,
       IFNULL(commission, 0) as commission,
       IFNULL(it, 0) as it,
       IFNULL(vendorDeposits, 0) as vendorDeposits,
       IFNULL(vendorWithdrawals + withdrawalRefunds, 0) as vendorWithdrawals,
       IFNULL(clientProfit + tc, 0) as clientProfit,
       IFNULL(clientLoss, 0) as clientLoss,
       IFNULL(bonus, 0) as bonus,
       IFNULL(ibCommission, 0) as ibCommission,
       IFNULL(e.endFloatingPL, 0) as endFloatingPL,
       IFNULL(p.credit, 0) AS credit,
       IFNULL(s.balance, 0) AS startingBalance,
       IFNULL(e.balance, 0) AS endingBalance,
       IF(LEFT(a.GROUP_NAME, 1) = 'S', 'SV', 'CY') as broker,
       IFNULL((-1 * (p.withdrawals + p.deposits - p.tc) - GREATEST(0, IFNULL(s.balance, 0)) + GREATEST(0, IFNULL(e.balance, 0)) + IFNULL(p.nbc, 0) + tc), 0) AS clientPL,
       a.group_name AS group_name,
       CASE WHEN SUBSTR(a.group_name, 2, 1) = 'E' THEN 'EUR' ELSE 'USD' END AS currency,
       IFNULL(a.equity, 0) AS equity,
       IFNULL(p.pl / p.deposits * 100, 0)  AS plFixed,
       IF(a.group_name IN ('SUBS4P', 'SUBS5P'), (a.equity - a.credit)/a.credit*100, (a.equity - a.credit - p.deposits - p.withdrawals + p.tc) / p.deposits * 100) AS equityPerformance,
       ABS(ROUND((e.balance - s.balance - vendorDeposits - vendorWithdrawals - it - clientProfit - clientLoss - swaps - commission - nbc - ibCommission - withdrawalRefunds - tc), 2)) as checksum
    ")
    ->from($eQ)
    ->leftJoin($sQ, 's.login = e.login')
    ->leftJoin($pQ, 'e.login = p.login')
    ->join('test_users a', 'a.login = e.login AND a.sid = 2')
    ->join('users c', 'c.id = a.id')
    ->leftJoin('managers m', 'm.id = c.managerId')
    ->leftJoin('users p', 'p.id = c.partnerId')
    ->having("
        fullName NOT LIKE '%test%'
        AND (startingBalance != 0 OR vendorDeposits != 0 OR  vendorWithdrawals != 0 OR  it != 0 OR  nbc != 0 OR  clientLoss != 0 OR  clientProfit != 0 OR  swaps != 0 OR  commission != 0 OR  ibCommission != 0 OR  endingBalance != 0)
        AND groupName NOT LIKE '%7P%'
        AND groupName NOT LIKE '%4P%'
    ");

$stmt = $this->connection->prepare($mQ->getSql());
$stmt->execute();

$result = $stmt->fetchAll();
```

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity17

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~267 days

Recently: every ~258 days

Total

8

Last Release

1586d ago

PHP version history (3 changes)v1.0PHP &gt;=5.3.3

v1.1PHP &gt;=5.4

1.5PHP &gt;=7.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/8eb68ea0a238b346910752a25d7ed2ba13d13636a5eeffa8b7f817164d73cbe5?d=identicon)[megawilddaddy](/maintainers/megawilddaddy)

---

Top Contributors

[![megawilddaddy](https://avatars.githubusercontent.com/u/1647204?v=4)](https://github.com/megawilddaddy "megawilddaddy (24 commits)")

---

Tags

pdoquery builder

### Embed Badge

![Health badge](/badges/megawilddaddy-simple-pdo-query-builder/health.svg)

```
[![Health](https://phpackages.com/badges/megawilddaddy-simple-pdo-query-builder/health.svg)](https://phpackages.com/packages/megawilddaddy-simple-pdo-query-builder)
```

###  Alternatives

[tommyknocker/pdo-database-class

Framework-agnostic PHP database library with unified API for MySQL, MariaDB, PostgreSQL, SQLite, MSSQL, and Oracle. Query Builder, caching, sharding, window functions, CTEs, JSON, migrations, ActiveRecord, CLI tools, AI-powered analysis. Zero external dependencies.

845.7k](/packages/tommyknocker-pdo-database-class)[codesvault/howdy-qb

Mysql Query Builder for WordPress

371.2k1](/packages/codesvault-howdy-qb)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
