如何在sql中使用join来获得所需的结果

时间:2014-07-18 05:26:53

标签: mysql sql node.js

我有2个表orc_users和orc_files。 现在我想从orc_files表中获取相关用户的文件 我试过这个查询: -

use orc 
select * 
from orc_users as  T1 
INNER JOIN orc_files AS t2 on T1.id = t2.userid
where T1.email='sdfsdf';

我得到了这个结果: - enter image description here

但我希望记录如下: -

user={name:"sad",
      phone:"asdasda",
      files:[{filename:"dfsdfs",size:12,fileid:"sdfs"}, 
      {filename:"dfsdfs",size:12,fileid:"sdfs"}]}

我正在使用带有MySQL的node.js,所以它给了我数组的结果。

请帮帮我。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

所有未经测试的: 在查询中使用group_concat()作为逗号分隔的字符串和group by,如下所示:

select
        t1.id
        /* specify the fields here */

      , GROUP_CONCAT(T2.Filename
             ORDER BY T2.Filename ASC SEPARATOR ', ') as filenames

from orc_users as  T1 
INNER JOIN orc_files AS t2 on T1.id = t2.userid
where T1.email='sdfsdf'
group by
      t1.id
      /* specify the fields here too */
;

还尝试使用CONCAT()来获取文件名和大小,例如

      , GROUP_CONCAT( CONCAT(T2.Filename,' size:',T2.size)
             ORDER BY T2.Filename ASC SEPARATOR ', ') as filenames

如果group_concat()中的concat()工作[我认为它会]继续添加项目,直到您获得所需的所有详细信息。

性能警告:不知道这会有多好,可能不会很好。

答案 1 :(得分:0)

在单个查询中无法获得该结果,但您可以在每个单独的行中获取files个数据作为查询,并将结果附加到当前行。