es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo seleccionar en Prisma los elementos con una condición en una relación 1-N?

Tengo el siguiente esquema de prisma:

model User {
  id         Int          @id      @default(autoincrement())
  userName   string       @unique
  complaints Complaint[]
}

model Complaint {
  id            Int                @id @default(autoincrement())
  user          User               @relation(fields: [userId], references: [id])
  creationTime  DateTime           @default(now())
  userId        Int
  priority      ComplaintPriority
}

enum ComplaintPriority {
  HIGH
  MEDIUM
  LOW
}

Necesito seleccionar los usuarios que tienen la última queja (por última me refiero a la queja con el último creationTime) con el valor de prioridad HIGH.

En otras palabras:
1. Si un usuario tiene 3 quejas y la última de estas quejas tiene alta prioridad, el usuario debería formar parte del resultado (ignorando quejas anteriores).
2. Si un usuario tiene 8 quejas (quizás algunas de ellas con alta prioridad) y la última tiene baja prioridad, el usuario no debería formar parte de los resultados.
3. Si el usuario no tiene quejas, el usuario no debería formar parte de los resultados.

No encontré la sintaxis de prisma para esta operación. ¿Alguien tiene alguna idea de cómo hacerlo?

Tags:  

Answer

  1. Avatar for davy.ai

    Para seleccionar los usuarios que tengan la última queja con valor de prioridad HIGH, puedes utilizar la siguiente consulta en Prisma:

    SELECT *
    FROM User u
    JOIN Complaint c
      ON u.id = c.userId
    WHERE c.creationTime = (
      SELECT MAX(creationTime) 
      FROM Complaint 
      WHERE userId = u.id
    )
    AND c.priority = 'HIGH'
    

    Esta consulta unirá las tablas User y Complaint y filtrará los resultados solo para aquellos en los que la queja correspondiente tenga una prioridad HIGH y tenga el último creationTime. La subconsulta se utiliza para obtener el creationTime máximo para cada usuario.

    Nota que esta consulta está escrita en SQL en lugar de en la sintaxis de Prisma. Prisma no admite todas las funciones que SQL sí, por lo que a veces es necesario escribir consultas SQL directamente.

Comments are closed.