Mysql 使用 LEFT JOIN 请求 SELECT

Mysql request SELECT with LEFT JOIN

我是 MySQL 的初学者,我在 mysql 有一些课程现在已经完成了,我有一个作业,由我们的老师提供,用于我的培训,但我阻止了从社交网站的基础中检索数据。我了解 JOIN 的基础,但我仍然难以理解 LEFT JOIN 或其他类型的 INNER JOIN 的逻辑 ...

这是我的问题,我的数据库有 2 tables,

member(id_member*, login, photo)
friend(id_member_request*, id_member_accept*, accept, date_acceptation)

朋友的接受字段 table 是一个允许我通过将值设置为 1 而不是 0 来验证他们是否有朋友的字段。

字段id_member_request和id_member_accept同意成员table的id_member。

我想取回好友的登录名和头像,以便显示。

我测试了几个查询:

SELECT m.login
     , m.photo 
  FROM friend AS a 
  LEFT 
  JOIN member AS m 
    ON m.id_member = a.id_member_accept 
  LEFT 
  JOIN member AS m1 
    ON m1.id_member = a.id_member_request 
 WHERE accept = 1;

查询有效,但没有显示所有友好成员,甚至是某些人的几倍。

在RIGHT JOIN中结果为NULL。 在 INNER JOIN 中没有结果。

提前致谢,因为我封锁了几个小时,我承认有点迷失了自己。 ;-)

格式化声明将对您有所帮助:) 好的,您在 m 和 m1 上都加入了同一列。

下面会带回数据,但是你要传入id_member_request..

DECLARE INT @MEMBERID = 2; --Example ID

SELECT m.login, m.photo 
FROM friend AS a 
LEFT JOIN member AS m ON m.id_member = a.id_member_accept
WHERE a.id_member_request = @MEMBERID
   AND a.accept = 1;

这是为 ID 为@MEMBERID 的会员的所有好友带回 m.login、m.photo;

我想你想要登录者的朋友。具体来说Member_Id这里的查询会对你有帮助

 select * from friend a
 inner join member b on (a.id_member_request=b.id_member or a.id_member_accept=b.id_member) and b.id_member=1 
where accept=1

其中1是显示好友的会员id

您可以按照以下示例重新编写查询

SELECT `m`.`id_member` AS `memberID`, 
       `m`.`login` AS `memberLoginName`, 
       `m`.`photo` AS `memberPhoto`,
       `m1`.`id_member` AS `friendID`, 
       `m1`.`login` AS `friendLoginName`, 
       `m1`.`photo` AS `friendPhoto`,
       `a`.`accept_date` AS `acceptDate` 
FROM `friends` AS `a`
INNER JOIN `member` AS `m` ON `a`.`id_member_request` = `m`.`id_member`
INNER JOIN `member` AS `m1` ON `a`.`id_member_accept` = `m1`.`id_member`
WHERE `a`.`accept`=1
ORDER BY `a`.`id_member_request`,`a`.`id_member_accept` ASC

SQL fiddle

中查看此示例

非常感谢您的帮助 ;-)

我试过你所有的答案,稍作改动,这个即使在 INNER、LEFT、RIGHT JOIN 中也能正常工作...

SELECT login,photo
FROM friend AS a
INNER JOIN member AS m ON ( a.id_member_request = m.id_member
OR a.id_member_accept = m.id_member )
WHERE m.id_member !=$id_member
AND a.accept=1;