J'essaie de faire afficher ceci mais chaque fois que je l'essaye, il dit "ensemble vide" au lieu de me montrer ce dont j'ai besoin. Voici une image du schéma de la base de données

Voici ce qu'on me demande:

Construisez l'instruction SQL pour rechercher tous les messages envoyés par message.sender_id = 1. Remarque: vous devez utiliser la clause WHERE pour définir les conditions de cette requête. Affichez les colonnes suivantes: - Prénom de l'expéditeur - Nom de famille de l'expéditeur - Prénom du destinataire - Nom de famille du destinataire - ID du message - Message - Horodatage du message

Et c'est le code MYSQL que j'ai trouvé, mais comme je l'ai dit, il ne retourne que et l'ensemble vide.

SELECT
 person.first_name AS "Sender's first name",
 person.last_name AS "Sender's last name",
 person.first_name AS "Receiver's first name",
 person.last_name AS "Receiver's last name",
 message.message_id AS "Message ID",
 message.message AS "Message",
 message.send_datetime AS "Message Timestamp"
FROM message
 JOIN person ON message.sender_id = person.person_id AND message.receiver_id = person.person_id
WHERE message.sender_id = 1;

Je ne peux pas comprendre comment obtenir le prénom et le nom de la table de personne à afficher en fonction de l'ID de l'expéditeur et du destinataire dans la table des messages.

Toute aide est la bienvenue! Je vous remercie!

1
B. Silva 20 avril 2017 à 23:15

3 réponses

Meilleure réponse

Vous devez vous inscrire deux fois sur person. Une jointure pour obtenir les informations sur l'expéditeur et une autre pour le destinataire. Comme vous utilisez la même table deux fois, vous devrez l'aliaser dans la requête. Quelque chose comme...

SELECT
  msg_sender.first_name AS "Sender's first name",
  msg_sender.last_name AS "Sender's last name",
  msg_receiver.first_name AS "Receiver's first name",
  msg_receiver.last_name AS "Receiver's last name",
  message.message_id AS "Message ID",
  message.message AS "Message",
  message.send_datetime AS "Message Timestamp"
FROM message
JOIN person AS msg_sender ON message.sender_id = msg_sender.person_id 
JOIN person AS msg_receiver ON message.receiver_id = msg_receiver.person_id 
WHERE message.sender_id = 1;
1
AndySavage 20 avril 2017 à 20:21

Vous devez join deux fois sur Person, ce qui suit devrait fonctionner:

SELECT s.first_name, s.last_name, r.first_name, r.last_name, m.message_id, m.send_datetime, m.message
FROM person s JOIN message m ON s.person_id = m.sender_id
JOIN person r ON m.receiver_id = r.person_id
WHERE s.person_id = 1;
0
Darshan Mehta 20 avril 2017 à 20:22

La façon dont vous avez écrit qui ressemble à votre formulaire person_id, la table personne doit être "1" - aussi vous sender_id et receiver_id de votre table de messages doivent être égal à "1", c'est un ensemble très mince ou tout simplement invalide.

Select 
 t2.first_name AS "Sender's first name",
 t2.last_name AS "Sender's last name",
 t3.first_name AS "Receiver's first name",
 t3.last_name AS "Receiver's last name",
 t1.message_id AS "Message ID",
 t1.message AS "Message",
 t1.send_datetime AS "Message Timestamp"
FROM
  message t1
JOIN (SELECT first_name, last_name, person_id FROM person) t2 
  ON message.sender_id = t2.person_id
JOIN (SELECT first_name, last_name, person_id FROM person) t3
  ON message.receiver_id = t3.person_id
WHERE
 message.sender_id = 1

Je n'ai pas exécuté ceci mais cela devrait vous donner une idée de ce qu'il faut écrire.

0
Keeper of the Grove 20 avril 2017 à 20:42