gpt4 book ai didi

php - 在 Laravel 中使用 DB::raw 对 SQL 进行最小-最大规范化

转载 作者:行者123 更新时间:2023-11-30 21:45:55 25 4
gpt4 key购买 nike

假设我有一个包含以下数据集的User 模型

id | name | logged_in | login_disabled | last_login
---------------------------------------------------
1 | John | 0 | 1 | 1522139454
2 | Jane | 1 | 0 | 1522139124
3 | Ian | 1 | 0 | 1522138722

我想获取已登录、未禁用登录的用户的集合,这些用户具有最大-最小标准化的 last_login。理想情况下,我会使用 SQL 来规范化结果,而不是让用户在 PHP 中计算规范化。

我有一个范围查询来获取名为 available 的已登录、未禁用登录的用户,我可以通过 User::available() 访问它,我想链接以获取最大-最小规范化 last_login 数据。

到目前为止我已经试过了:

    $users = User::available()
->select(
\DB::raw(
"1.00 * ( t.last_login - t.min_last_login ) / t.login_range as normalized_login
FROM (
SELECT
last_login,
MIN(last_login) AS min_last_login,
MAX(last_login) - MIN(last_login) AS login_range,
FROM
users
) t
"
)
)
->get();

但这是抛出一个 SQL 错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM users ) t ' at line 7 (SQL:

执行的原始 SQL 是:

select 1.00 * ( t.last_login - t.min_last_login ) /
t.login_range as normalized_login
FROM (
SELECT
last_login,
MIN(last_login) AS min_last_login,
MAX(last_login) - MIN(last_login) AS login_range,
FROM
users
) t
from `users` where `logged_in` = 1 and `disabled` = 0

原始 SQL 确实看起来有点不对劲,但我不太清楚如何将其与 Laravel 查询构建器中的 select 方法相匹配。

如有任何帮助,我们将不胜感激。我正在使用 Laravel 5.4

最佳答案

您只需在 SELECT 语句的最后一列之后多一个 逗号 (,)。

SELECT
last_login,
MIN(last_login) AS min_last_login,
MAX(last_login) - MIN(last_login) AS login_range,
here is your culprit^

因此,它期望选择另一列。这就是你得到语法错误的原因:

'FROM users ) t at line 7 (SQL:'

关于php - 在 Laravel 中使用 DB::raw 对 SQL 进行最小-最大规范化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49508314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com