我有3张桌子,“ u”,“ d”,“ s”
‘u’有
>用户ID
>分
‘d’有
>分
> divname
的有
>名称
> primaryuserid
> secondaryuserid
现在我想做的是显示一个表格,其中包含以下格式的行
> userid,divname,sname
另外,找出一种方法来解密此sname表的用户ID是主要用户还是辅助用户.
我可以使用左联接显示userid和divname,但是我不知道如何添加第三个表?更棘手的是,每个用户ID可以有1个以上的名称,最多约20个.有没有一种方法可以显示0-20个名称,具体取决于用户ID,并用逗号分隔?
我目前拥有的是just和u和d表彼此对应.
SELECT
e.userid,
e.divid,
d.divname
FROM
e
LEFT JOIN d ON (e.divid = d.id)
ORDER BY e.userid
解决方法:
您正在这里寻找一些不同的东西.首先,可以使用MySQL的GROUP_CONCAT()函数完成“根据用户ID显示0-20个名称的方式,以逗号分隔”,因此您的查询将如下所示(主要和次要之间没有区别):
SELECT u.userid,
d.divname,
GROUP_CONCAT(s.sname SEPARATOR ', ') AS "snames"
FROM u
LEFT JOIN d ON d.divid = u.divid
LEFT JOIN s ON (s.primaryuserid = u.userid OR s.secondaryuserid = u.userid);
现在,为了能够区分用户是主要用户还是次要用户,您必须要有一点点幻想.我可能会用工会这样做,例如:
SELECT u.userid,
d.divname,
GROUP_CONCAT(s.sname SEPARATOR ', ') AS "snames",
'Primary' AS "category"
FROM u
LEFT JOIN d ON d.divid = u.divid
LEFT JOIN s ON s.primaryuserid = u.userid
UNION ALL
SELECT u.userid,
d.divname,
GROUP_CONCAT(s.sname SEPARATOR ', ') AS "snames",
'Secondary' AS "category"
FROM u
LEFT JOIN d ON d.divid = u.divid
LEFT JOIN s ON s.secondaryuserid = u.userid
这将为每个用户ID提供两行(一个主要,一个辅助),并以逗号分隔列表的名称.
标签:sql,php
来源: https://codeday.me/bug/20191210/2098819.html