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 diseñar una lista de amigos en sql /sqlite

Soy una traductora de documentos de IT y mi tarea es traducir el siguiente texto al español:

Soy relativamente nueva en SQL y estoy intentando crear una relación entre dos usuarios. Para ser amigos, se debe enviar y aceptar una solicitud de amistad. Actualmente, tengo una tercera tabla llamada items. El usuario debería poder ver todos los items que son propiedad de sus amigos. Me encuentro un poco atascada escribiendo esta consulta…

Tabla de Items:
sql
CREATE TABLE IF NOT EXISTS item(
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
owner VARCHAR(50) NOT NULL,
borrowedBy VARCHAR(50),
imageUrl TEXT
);

Tabla de amistad:
sql
CREATE TABLE IF NOT EXISTS friendship(
friendship_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
);

Tabla de amistades de usuario:
sql
CREATE TABLE IF NOT EXISTS user_friendship(
username VARCHAR(50) NOT NULL,
friendship_id INTEGER NOT NULL,
status INTEGER NOT NULL,
PRIMARY KEY (username, friendship_id)
);

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, puedes unir las tablas de amistad y de user_friendship con la tabla de artículos usando la siguiente consulta:

    SELECT item.* 
    FROM item 
    JOIN user_friendship ON (item.owner = user_friendship.username OR item.borrowedBy = user_friendship.username) 
    JOIN friendship ON user_friendship.friendship_id = friendship.friendship_id 
    WHERE user_friendship.status = 1;
    

    Explicación:

    • La palabra clave JOIN se utiliza para unir filas de dos o más tablas basadas en una columna relacionada entre ellas.
    • En este caso, se utiliza INNER JOIN para devolver solo las filas que tienen valores coincidentes en ambas tablas.
    • La cláusula ON especifica la condición para unir las tablas. Aquí, estamos utilizando el operador OR para emparejar la columna owner o borrowedBy de la tabla item con la columna username de la tabla user_friendship.
    • También estamos uniendo la tabla de amistad mediante la columna friendship_id, que es común en todas las tablas.
    • La cláusula WHERE se utiliza para filtrar los resultados. Aquí, estamos seleccionando solo las filas donde la columna status de la tabla user_friendship es igual a 1, lo que indica que la amistad es mutua.

    Esta consulta debería devolver todos los artículos que son propiedad de los amigos del usuario.

Comments are closed.