如何将这些 Prisma 查询简化为单个查询?
P粉423694341
P粉423694341 2023-09-03 08:34:00
[MySQL讨论组]

我需要在事先不知道id的情况下按日期udpate用户的最后一个帖子,我可以通过两个查询来完成,如下所示:

ctx.prisma.post.update({
  where: {
    id: await ctx.prisma.post
      .findFirst({
        where: { userId: "c2e4c855-768c-48ab-b9c1-155ce1090cd6" },
        orderBy: { date: "desc" },
      })
      .then(post => post.id),
  },
  data: {
    updated: true
  },
})

我一直在尝试让它作为一个查询工作,但我没有成功,这是我作为 SQL 子句得到的最好结果:

UPDATE Post
SET updated = true
WHERE id IN (
    SELECT * FROM (
        SELECT id
        FROM Post
        WHERE user_id = "c2e4c855-768c-48ab-b9c1-155ce1090cd6"
            AND date = (SELECT MAX(date) from Post)) as x);

尽管这是一个子句,但它也会两次访问数据库。如果有更好的方法在 SQL 中执行此操作,我会对学习感兴趣,但我不想使用 Prisma 发送原始查询并失去所有类型安全性。

我正在寻找的内容是否可能,或者我应该将其保留在两个查询中吗?

P粉423694341
P粉423694341

全部回复(1)
P粉741223880

如果您只想更新给定 user_id 的最新 Post

UPDATE Post
SET updated = true
WHERE user_id = 'c2e4c855-768c-48ab-b9c1-155ce1090cd6'
ORDER BY date DESC, id DESC
LIMIT 1;

我不知道你会如何用 prisma 编写这个,但这是 SQL 查询。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号