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
中查看此示例
非常感谢您的帮助 ;-)
我试过你所有的答案,稍作改动,这个即使在 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;
我是 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
中查看此示例
非常感谢您的帮助 ;-)
我试过你所有的答案,稍作改动,这个即使在 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;