Laravel Inner加入右表的最后一个值

时间:2018-06-13 22:59:11

标签: sql laravel laravel-5 greatest-n-per-group

我正在尝试获取用户登录日志的最后一个值,但我无法使用此代码:

DB::table('users')
    ->leftJoin('login_logs', 'login_logs.id', '=', function($query) {
        $query->select('login_logs.id')
            ->where('users.id', '=','login_logs.user_id')
            ->orderBy('login_logs.created_at')
            ->limit(1);
    })->get();

我有2个表用户和登录日志我想让所有用户使用上次登录日志可以有人帮我一把吗?我是Laravel的新人。

编辑: 我得到了sql的代码:

SELECT c.*, o.* 
FROM users c 
INNER JOIN login_logs o ON o.id = (
SELECT id 
FROM login_logs 
WHERE login_logs.users_id = c.id 
ORDER BY id DESC 
LIMIT 1)

EDIT2: 这段代码对我有用

DB::table('users')
->leftJoin('login_logs', 'login_logs.id', '=', (DB::RAW('(
SELECT id FROM login_logs 
WHERE login_logs.user_id = users.id 
ORDER BY login_logs.id DESC 
LIMIT 1)')))
->select('users.*','login_logs.created_at as lastLogin','login_logs.type')
->get()

一些最好的想法?:

3 个答案:

答案 0 :(得分:0)

尝试这样的事情:

DB::table('users')
            ->join('login_logs', 'login_logs.user_id', '=', 'users.id')
            ->order_by('login_logs.id', 'desc')
            ->first();

答案 1 :(得分:0)

要从每个用户的登录日志表中获取最新记录,您可以使用以下自加入查询

// Try this insted.

var myid = "#myid";
var n = 4;
$(myid+n).show();

使用查询构建器,您可以将其重写为

select u.*, l.*
from users u
join login_logs l on u.id = l.user_id
left join login_logs l1 on l.user_id = l1.user_id
and l.created_at < l1.created_at
where l1.user_id is null

Laravel Eloquent select all rows with max created_at

Laravel - Get the last entry of each UID type

Laravel Eloquent group by most recent record

答案 2 :(得分:0)

试试这段代码。 内部查询将提供每个用户的上次登录详细信息并按表(Id)加入 与LEFT JOIN。因此它只回答您所需用户的详细信息。 您可以在Last添加WHERE CONDITION以获取特定ID(用户)详细信息

SELECT U.ID,
    LOGS.CREATED_AT
FROM USERS AS U
    LEFT JOIN
        (
            SELECT ID,
                MAX(CREATED_AT) AS CREATED_AT
            FROM LOGIN_LOGS
            GROUP BY ID
        ) AS LOGS
    ON  LOGS.ID = U.ID
--WHERE U.ID='your_user_id'

希望这会对你有所帮助。