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

我有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        | 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有什么意义?我想获得所有奖项以及每个奖项的用户,不管怎样,我找到了正确答案,谢谢你谢谢你的反馈