【问题标题】:How to return Query Builder with a PostgreSQL CTE query如何使用 PostgreSQL CTE 查询返回查询生成器
【发布时间】:2017-07-01 12:23:23
【问题描述】:

我有一个使用 PostgreSQL CTE(Common Table Expressions) 功能的查询:

WITH tmp_users AS (
  SELECT users.id, users.name, users.email, users.created_at,sum(transactions.amount) as credit
  FROM users INNER JOIN transactions 
    ON users.id = transactions.user_id 
GROUP BY users.id,users.name,users.email, users.created_at, transactions.user_id
)
SELECT * FROM tmp_users WHERE credit > 100;

我可以用这个实现结果:

$result = DB::select("WITH tmp_users AS (
  SELECT users.id, users.name, users.email, users.created_at,sum(transactions.amount) as credit
  FROM users INNER JOIN transactions 
    ON users.id = transactions.user_id 
GROUP BY users.id,users.name,users.email, users.created_at, transactions.user_id
) SELECT * FROM tmp_users WHERE credit > 100"); 

但我需要查询生成器,而不仅仅是结果。

任何帮助将不胜感激。

附注:

为什么我使用 postgres CTE 功能?

因为在 PostgreSQL 中,如果我想对别名字段做任何语句,我需要使用 CTE 功能(Read more)。

【问题讨论】:

  • 您可以通过使用子查询和select * 获得相同的结果(性能更好)。
  • 我在上面的查询中添加了一个 where。现在,我可以使用子查询得到相同的结果吗?
  • 是的,当然。
  • But I need the Query Builder 那是什么,查询生成器
  • 看我的回答..

标签: php postgresql laravel eloquent common-table-expression


【解决方案1】:
SELECT * FROM 
(
  SELECT u.id, u.name, u.email, u.created_at
   ,sum(t.amount) as credit
   FROM users u
   INNER JOIN transactions t ON u.id = t.user_id 
   GROUP BY u.id, u.name, u.email , u.created_at -- , t.user_id
) tmp_users
WHERE credit > 100;

【讨论】:

    【解决方案2】:

    感谢@wildplasser

    $query = DB::table('users')
            ->select('*')
            ->from(DB::raw(
            '(SELECT u.id, u.name, u.created_at, sum(transactions.amount) as credit 
            FROM users as u INNER JOIN transactions as t ON u.id = t.user_id 
            GROUP BY u.id,u.name,u.created_at,t.user_id) as tmp_users'
        ));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 2014-04-16
      • 2012-07-24
      • 2020-12-25
      • 1970-01-01
      相关资源
      最近更新 更多