首页  >  问答  >  正文

如何将这些 Prisma 查询简化为单个查询?

<p>我需要在事先不知道<code>id</code>的情况下按日期<code>udpate</code><code>用户</code>的最后一个<code>帖子</code>,我可以通过两个查询来完成,如下所示:</p> <pre class="brush:php;toolbar:false;">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 }, })</pre> <p>我一直在尝试让它作为一个查询工作,但我没有成功,这是我作为 SQL 子句得到的最好结果:</p> <pre class="lang-sql prettyprint-override"><code>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); </code></pre> <p>尽管这是一个子句,但它也会两次访问数据库。如果有更好的方法在 SQL 中执行此操作,我会对学习感兴趣,但我不想使用 Prisma 发送<code>原始</code>查询并失去所有类型安全性。</p> <p>我正在寻找的内容是否可能,或者我应该将其保留在两个查询中吗?</p>
P粉423694341P粉423694341413 天前419

全部回复(1)我来回复

  • P粉741223880

    P粉7412238802023-09-04 00:51:06

    如果您只想更新给定 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 查询。

    回复
    0
  • 取消回复