How can I reduce these Prisma queries to a single query?
P粉423694341
2023-09-03 08:34:00
<p>I need to get the last <code> of user</code> by date <code>udpate</code><code> without knowing the <code>id</code> beforehand. Post </code>, I can do it with two queries like this: </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>I've been trying to get it to work as a query but I've had no success, this is the best I've gotten as a SQL clause: </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>Although this is a clause, it also accesses the database twice. If there is a better way to do this in SQL, I'd be interested in learning it, but I don't want to use Prisma to send <code>raw</code> queries and lose all type safety. </p>
<p>Is what I'm looking for possible, or should I keep it in two queries? </p>
If you only want to update the latest
Post
for a givenuser_id
:I don't know how you would write this in prisma, but this is a SQL query.