Mysql
 sql >> Base de données >  >> RDS >> Mysql

Faire une sous-requête sur les résultats de la requête ?

Essayez ceci :

SELECT a.name_surname,GROUP_CONCAT(Distinct w.word Order by w.word asc) AS words
FROM (
  SELECT f1.asked_user_id AS friend_id,
       f1.created,
       u.name_surname,
       u.avatar
  FROM friends AS f1 
  INNER JOIN friends AS f2 ON f1.asked_user_id = f2.asker_user_id
  INNER JOIN users AS u ON f1.asked_user_id = u.id
       AND f1.asker_user_id = f2.asked_user_id
       AND f1.asker_user_id = 1
  WHERE f1.status = 1 AND f2.status = 1
) a
LEFT JOIN connections c ON c.user_id = a.friend_id 
LEFT JOIN words_en w ON c.word_id = w.id
GROUP BY 1;

démo sqlfiddle

Ayant votre requête d'origine, ce que j'ai fait est de traiter cette requête comme une table (a) et LEFT JOIN avec des connections table. Ensuite, LEFT JOIN les connections tableau avec les words_en tableau pour atteindre les mots souhaités. Cela permet d'obtenir tous les utilisateurs qui reviennent de votre requête d'origine, même en l'absence de connexions/mots.