Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

81
Views
Obtenga solicitudes de amistad pendientes de una mesa

Estoy tratando de obtener todas las solicitudes de amistad pendientes de una tabla con esquema:

identificación id_usuario amigo_id

Una solicitud pendiente sería solo una fila como:

(Lo que significa que el usuario 1 envió una solicitud al usuario 2)

identificación id_usuario amigo_id
1 1 2

y cuando se acepta, se convierte en dos filas, y puedo unir dos de esta tabla para encontrar todas las aceptadas (esto funciona bien).

Una solicitud de referencia aceptada:

identificación id_usuario amigo_id
1 1 2
2 2 1

Mi consulta aceptada se ve así (estoy usando Bookshelf js y knex.js):

 const friends = new Friends(); return friends.query((qb) => { qb.select('friends.user_id', 'friends.friend_id'); qb.join('friends as friendsTwo', 'friends.user_id', 'friendsTwo.friend_id'); qb.where('friends.user_id', '=', id); }).fetchAll();

¿Cómo puedo modificar esto para obtener solo las relaciones unidireccionales? Lo primero que pensé fue unirme y no pude hacer que funcionara, así que si alguien sabe una respuesta o ha visto una buena respuesta, por favor guíeme, gracias :).

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Creo que puedes alejarte por completo de la idea de unirte a este proyecto. Había hecho algo similar en mis proyectos anteriores y creo que será mejor agregar un tercer campo isMutual que significa si son mutuos o no. El campo se explica por sí mismo y creo que entendiste la idea. Después de eso, su mesa debe verse como

Sin amistad aceptada

identificación id_usuario amigo_id esmutual
1 1 2 falso

amistad aceptada

identificación id_usuario amigo_id esmutual
1 2 1 verdadero
2 1 2 verdadero

Creo que hacer esto realmente beneficiará a su sistema ya que su consulta será más rápida e intentará crear un compound index for (user_id, friend_id) . Esta solución es más hacia cambiar la carga.

Conclusión

Con esto, puede lograr consultas más rápidas, pero todo el trabajo duro realizado durante la READ OPERATION en el esquema anterior cambiará a la WRITE OPERATION . Pero creo que esto reducirá más la velocidad de escritura. Y sí, asegúrese de usar la transacción para realizar actualizaciones para el campo isMutual .

about 4 years ago · Juan Pablo Isaza Report

0

qb.leftJoin('friends as friendsTwo', 'friends.user_id', 'friendsTwo.friend_id'); qb.whereNull('friendsTwo.user_id');

Esto LEFT JOIN , que mantiene todas las filas (pendientes o aceptadas), pero luego filtra para mantener solo aquellas que no tienen un registro coincidente en friendsTwo ; devolviendo así solo los enlaces pendientes.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!