gpt4 book ai didi

MySQL 选择状态数组中的位置和最后一次出现等于特定值

转载 作者:行者123 更新时间:2023-12-02 18:15:22 25 4
gpt4 key购买 nike

假设我有一个这样的表:

id  user_id status  updateded_id
1 1 yes 2/5/2013
2 2 no 2/1/2013
3 3 yes 1/28/2013
4 2 yes 1/24/2013
5 2 no 1/20/2013
6 1 yes 1/16/2013
7 3 no 1/12/2013
8 4 yes 1/8/2013
9 5 yes 1/4/2013
10 5 no 12/31/2012
11 6 yes 12/27/2012
12 7 no 12/23/2012
13 6 yes 12/19/2012
14 4 yes 12/15/2012
15 3 no 12/11/2012
16 3 yes 12/7/2012
17 1 no 12/3/2012
18 1 yes 11/29/2012

我需要编写一个查询,仅当最新 updated_id 的状态为“yes”时才选择 user_id

例如,将选择 user_id 1,而不会选择 user_id 2。我在复杂的 Larvel 查询生成器(Larvel 版本 4.2)中编写了此代码。

结果是多个用户。因此,在此查询中,仅当状态表中最后一次出现的情况为"is"时,才应选择用户一次。

我尝试过:

    $query->join('mytable', function ($join) use ($statuses) {
->whereRaw('mytable.status in ('.$statuses.') )
->orderBy('mytable.updated_at', 'desc')
->limit(1);
});

并且:

    $query->join('statuses', function ($join) use ($statuses) {
->whereIn('mytable.status ,$statuses )
->orderBy('mytable.updated_at', 'desc')
->limit(1);
});

whereIn 和 whereRaw 函数出现错误。就像它们不存在一样。

所以,进步了。通过此查询,我可以找到一个用户的最新状态为"is"。我找不到一种方法让它通过这种逻辑选择所有用户:

SELECT  s1.user_id 
FROM statuses s1
WHERE s1.user_id = ( SELECT user_id
FROM statuses s2
WHERE s2.status IN ('yes', 'no') ORDER BY s2.updateded_id DESC LIMIT 1)
AND s1.status= 'yes';

最佳答案

你可以这样做。

一个用户有多个状态,您想根据最新的状态获取用户,对吧?

Eloquent 用户模型

class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable;

/*
* Get the user's statuses
*/
public function statuses()
{
return $this->hasMany(Status::class);
}

/**
* Get the user's latest status.
*/
public function latestStatus()
{
return $this->hasOne(Status::class)->latestOfMany('updated_at');
}
}

然后你可以像这样编写查询

return User::whereHas('latestStatus', function($query) {
$query->where('status', 'yes');
})->get();

关于MySQL 选择状态数组中的位置和最后一次出现等于特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71666762/

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