mysql查询上的左连接没有得到我想要的结果
我有2个表,awards和awards\u user,在mysql查询中存在左连接问题,无法获得我想要的结果 奖项:mysql查询上的左连接没有得到我想要的结果,mysql,left-join,Mysql,Left Join,我有2个表,awards和awards\u user,在mysql查询中存在左连接问题,无法获得我想要的结果 奖项: awardid | name | link 1 | award1 | photo link 2 | award2 | photo link 3 | award3 | photo link 4 | award4 | photo link 用户: awardid | username 2
awardid | name | link
1 | award1 | photo link
2 | award2 | photo link
3 | award3 | photo link
4 | award4 | photo link
用户:
awardid | username
2 | mark
2 | jon
3 | mark
1 | jon
我试图得到这样的结果:
award name | award photo | Users
award1 | link | jon
award2 | link | mark,jon
award3 | link | mark
award4 | link | -------
这是我的尝试:
SELECT au.username
, au.userid
, a.link
, a.name
, a.awardid
FROM awards a
LEFT
JOIN awards_user au
ON au.awardid = a.awardid
WHERE a.forumid = 22
GROUP
BY a.awardid
, au.username
ORDER
BY a.awardid DESC
解决问题的方法是:
$all_awards = $db->query_read(" SELECT awards.name as name, awards.link as link,
GROUP_CONCAT(DISTINCT awards_user.username) AS username
FROM awards LEFT JOIN awards_user ON (awards_user.awardid = awards.awardid)
where awards.forumid = '".$_REQUEST['forumid']."'
GROUP BY awards.awardid, awards.name, awards.link
");
GROUP_CONCAT正是您所需要的:
SELECT
a.name AS name
, a.link AS photo
, GROUP_CONCAT(DISTINCT au.username) AS users
FROM awards AS a
LEFT JOIN awards_user AS au ON (au.awardid = a.awardid)
GROUP BY
a.awardid
, a.name
, a.link
ORDER BY
a.awardid DESC
有关MySQL组的更多信息,请点击此处:
顺便说一句,您甚至可以对用户名进行排序,或者选择不同的分隔符(如果您想在组中使用)。只需阅读MySQL手册和google MySQL group_concat示例:并在表名上添加“`”,因为您的命名约定非常粗糙,可能会与MySQL保留字相匹配,并再次练习安全性筛选您的输入$\u请求['forumid']尝试以下方法:
SELECT awards.name as award_name, award.link as award_photo,
GROUP_CONCAT(DISTINCT awards_user.username AS users
FROM awards LEFT JOIN awards_user ON (awards_user.awardid = awards.awardid)
GROUP BY awards.awardid, awards.name, awards.link;
如果你想要一个像award name | award photo | Users这样的结果,你不认为选择这些列是个好主意吗?我不明白你的意思,我必须使用left join,因为那里的用户有更多的奖励,这不是我们应该做的。我现在编辑我的评论,不要将$_REQUEST['forumid']放入SQL查询字符串中。否则我会反对这个:-你的问题也不清楚。你想要一些东西,但是你没有分享你得到的东西,你对区别的理解是什么。哎呀,@DarkSide在我打字的时候打败了我-他看起来很棒。而且你忘了在小组讨论后加上括号:我修正了一些错误,但仍然显示错误$all\u awards=$db->query\u read SELECT awards.name作为名称,awards.link作为链接,GROUP_CONCATDISTINCT awards_user.username作为用户名从awards左侧加入awards_user.awardid=awards.awardid按awards.awardid、awards.name、awards.link分组;好的,我修复了这个错误,我认为工作正常[在组\u concat之后忘记结束括号]$all\u awards=$db->query\u读取选择awards.name作为名称,awards.link作为链接,组\u CONCATDISTINCT awards\u user.username作为用户名从奖励中离开加入奖励\u用户在奖励中\u user.awardid=awards.awardid其中awards.forumid='。$\u请求['forumid'].按awards.awardid、awards.name、awards.link分组;好的,我尝试了,但当我获得用户的用户名时出现了相同的问题,只显示1个用户,我想显示所有获得相同奖励的用户jon、mark、elc..抱歉,这已经成功了,但我现在遇到了新问题…我想在每个用户上都添加用户id我在示例数据中没有看到用户id字段。无论如何,你可以这样做另一方面,你确定你到底在做什么吗?把用户名和ID作为CSV有什么意义?我想获得所有奖项以及每个奖项的用户,不管怎样,我找到了正确答案,谢谢你谢谢你的反馈