如何将这些 Prisma 查询简化为单个查询?
P粉423694341
2023-09-03 08:34:00
<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>
如果您只想更新给定
user_id
的最新Post
:我不知道你会如何用 prisma 编写这个,但这是 SQL 查询。