1 votes

Sql Query - coincé avec une simple jointure à gauche

Je suis coincé avec cette simple requête Sql depuis 3 heures et j'ai l'esprit vide.

J'ai une table Utilisateur qui saisit le nom, l'ID utilisateur, etc. Ensuite, j'ai une table Amis qui saisit qui est l'ami de qui et son statut.

Utilisateur

nom d'utilisateur
nom

Ami

ami_id
nom d'utilisateur
identifiant_ami
statut (accepté, en attente, etc.)

Ce que je veux faire, c'est que lorsqu'un utilisateur connecté recherche un nom, par exemple "John", il affiche une liste de tous les Johns du site Web et, à côté de chaque John, il effectue une recherche dans une table d'amis pour voir si l'enregistrement existe, c'est-à-dire si l'utilisateur connecté est un ami de l'un des Johns.

  • s'il existe, montrer l'état actuel
  • s'il n'existe pas, affichez "Ajouter un ami".

Dois-je d'abord exécuter une requête sur la table User comme select user_id from User where name Like 'John%', puis utiliser ces identifiants et les exécuter sur la table Friends.

Je n'arrive pas à l'obtenir. Merci

2voto

Ronald Wildenberg Points 18258

Vous commencez par tous les utilisateurs qui correspondent à votre critère (je ne suis pas sûr de la syntaxe exacte de MySQL) :

SELECT u.user_id
FROM User u
WHERE u.name LIKE '%John%'

Cela vous donne tous les utilisateurs cibles. Ensuite, vous voulez une jointure externe sur le Friend où vous limitez les résultats à l'utilisateur actuellement connecté :

SELECT u.user_id, f.status
FROM user u
LEFT OUTER JOIN Friend f ON f.friend_id = u.user_id
WHERE f.user_id = <currentUserId> AND u.name LIKE '%John%'

Vous obtenez un ensemble de résultats contenant les identifiants de tous les utilisateurs nommés John et un indicateur de statut qui est soit nul, soit un statut réel. S'il est nul, vous avez un nouvel ami potentiel, sinon, vous avez un ami existant.

1voto

Lieven Keersmaekers Points 32396

Quelque chose comme ça pourrait vous aider à démarrer.

Déclaration SQL

SELECT u.name, COALESCE(f.Status, 'Add Friend')
FROM   User u 
       LEFT OUTER JOIN Friend f ON f.User_ID = u.User_ID
WHERE  u.name = 'John'

1voto

P Sharma Points 430

La requête suivante doit résoudre votre problème

select a.user_name,case when a.user_name like 'John%' then b.status else 'Add Friend' end case from users_det a,friend b where a.user_id = b.user_id

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X