CakePHP 3-如何在IN条件下使用子查询?

经内

我必须构建以下查询,但在select max()部分中不知道。

有这两个表:

玩家

-------------
| id | name |
-------------
| 1  | AAAA |
-------------
| 2  | BBBB |
-------------

分数

----------------------------------------
| player_id | score | created          |
----------------------------------------
| 1         | 1080  | 2015/12/28 15:38 |
----------------------------------------
| 1         | 1199  | 2015/12/28 16:00 |
---------------------------------------|
| 2         | 2400  | 2015/12/29 10:30 |
----------------------------------------
| 2         | 2420  | 2015/12/29 10:41 |
----------------------------------------
| 2         | 2031  | 2015/12/29 11:12 |
----------------------------------------

结果我希望拥有:

----------------------------
| id | name | latest_score |
----------------------------
| 1  | AAAA | 1199         |
----------------------------
| 2  | BBBB | 2031         |
----------------------------

SQL查询#1-此查询给出我想要的上述结果

SELECT
  players.id AS id,
  players.name AS name,
  scores.player_id,
  scores.score AS latest_score,
  scores.created
FROM
  players
JOIN scores ON
  players.id = scores.player_id
WHERE
  scores.created IN(
  SELECT MAX(scores.created)
  FROM
    scores
  WHERE
    scores.player_id= player.id
)

SQL查询#2-通过@ tim-biegeleisen,也可以使用,所以还是可以帮助我建立此查询?

SELECT p.id, p.name, s1.score AS latest_score
FROM players p INNER JOIN scores s1
ON p.id = s1.player_id
INNER JOIN
(
    SELECT s.player_id, MAX(s.created) AS latest
    FROM scores s
    GROUP BY s.player_id
) s2
ON s1.player_id = s2.player_id AND s1.created = s2.latest

目前正在尝试建立类似:

    $query = $this->Players->find()
            ->select([
                "Players.id",
                "Players.name",
                "Scores.scores",
                "Scores.created"
            ])
            ->join([
                "Scores" => [
                    "table" => "scores",
                    "type" => "left",
                    "conditions" => "Players.id = Scores.player_id"
                ]
            ])
            ->where([
                "Scores.created" =>
                $this->Players->Scores->find()
                ->select(["MAX(Scores.created)"])
                ->where(["Scores.player_id = Players.id"])
            ]);

问题是,此生成器不起作用:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法有错误;您可能无法使用它。检查与您的MariaDB服务器版本相对应的手册以获取正确的语法,以在第1行的'MAX(`Scores__created`)FROM scores Scores WHERE Scores.player_id = Players.i'附近使用

我不想只是建立一个联接,然后订购Scores.createddesc,并抓住[0]以获得第一行。您知道如何建立此查询吗?请帮忙。

谢谢!

韦斯·金

尝试使用CakePHP SQL函数语法:

$subquery = $this->Players->Scores->find();

$query = $this->Players->find()
    ->select([
        "Players.id",
        "Players.name",
        "Scores.scores",
        "Scores.created"
    ])
    ->join([
         "Scores" => [
             "table" => "scores",
             "type" => "left",
             "conditions" => "Players.id = Scores.player_id"
          ]
    ])
    ->where([
        "Scores.created" => $subquery
            ->select([$subquery->func()->max('Scores.created')])
            ->where(["Scores.player_id = Players.id"])
    ]);

您可以在此处阅读关于CakePHP 3的ORM SQL函数的文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Cakephp 3:在“ where”条件下使用“ $ this-> alias()”

来自分类Dev

Cakephp 3查询或条件

来自分类Dev

如何在CakePHP 3中执行子查询

来自分类Dev

CakePHP 3中的子查询?

来自分类Dev

Cakephp 3 NOT IN查询

来自分类Dev

Cakephp 3更新查询

来自分类Dev

CakePHP 3原始SQL查询

来自分类Dev

cakephp 3添加条件验证

来自分类Dev

cakephp 3添加条件验证

来自分类Dev

CakePHP 3:如何更新foreignKey?

来自分类Dev

使用Cakephp 3保存关联

来自分类Dev

使用Cakephp 3保存关联

来自分类Dev

如何在CakePHP 3中修改UNION查询?

来自分类Dev

Cakephp3,如何在cakephp3中使用where子句和内部联接?

来自分类Dev

在这种情况下如何使用案例-CakePhp 3

来自分类Dev

如何使用CakePHP 3联接多个表?

来自分类Dev

Cakephp3:如何使用toList()

来自分类Dev

如何在CakePHP 3.x的查询生成器中使用哈希值?

来自分类Dev

如何在CakePHP 3.x的查询生成器中使用哈希值?

来自分类Dev

在cakephp 3中提取查询结果

来自分类Dev

在 cakephp 3 的数组中构建查询

来自分类Dev

Cakephp3小写sql查询

来自分类Dev

如何在CakePHP 3中使用postGIS

来自分类Dev

如何在CakePHP 3.x中使用hybridauth插件?

来自分类Dev

如何在事件中使用Cakephp 3的Auth组件

来自分类Dev

如何在事件中使用Cakephp 3的Auth组件

来自分类Dev

如何从cakephp 3中的URL访问参数

来自分类Dev

CakePHP 3:如何接收翻译的内容?

来自分类Dev

协会如何运作?cakephp 3.x