2015-04-02 67 views
0

我想创建一个查询来从多个表中收集信息。这里的基本知识,了解我的需求:选择数组,子查询和多行结果

收集的信息从表中的一个非常简单。每个结果一行。这是主要结果,所以我们只需制作变量p.id,p.name和p.street即可调用表格道具p。

第二个表,我会称之为事件E也将是简单的信息。每个道具将会有一个事件,并且它会加入p.id = e.pid。从该表中,我们需要e.event_start。

这里是艰难的地方。第三个表格有两层结果:我们称之为特征f。功能有四列:fid,pid,feature和desc。我们将它加入到p.id = f.pid中。

我需要的是走出来这样的结果:

[0] PID 
[1] name 
[2] street 
[3] event_start 
[4] features 
    [0] lighting 
     [0] red 
     [1] orange 
    [0] sound 
     [0] guitar 
     [1] drum 
     [2] keyboard 

现在,我一直在网上寻找解决方案,想我可以在选择与子查询做到这一点:

SELECT p.id, p.name, p.street, e.event_start, (SELECT f.feature) 

当然使用连接。从简单到困难,我没有得到它的工作。我已经看过GROUP_CONCAT,但这绝对不会给我我需要的东西......它使单个字符串等等。

有没有办法在单个查询中做到这一点?如果是这样,建议如何非常受欢迎。

谢谢你的时间。

回答

0

从我的理解;你有三个表p,e,f,你需要使用JOIN从这些表中获取值。是这样:

SELECT p.id,p.name,p.street,e.event_start,f.feature,f.desc 
          -- i'm not sure you need features from third table based on conditions. Use CASE WHEN in the select 
          --sorry didn't understand what you mentioned 
FROM p JOIN e ON p.id=e.pid 
     JOIN f ON p.id=f.pid 
WHERE      --state your conditions 
+0

排序,但不完全。您描述的方法会给我们多行:每个特征/值组合的单独一行。我需要的是一行pid,前两个表中的所有其他信息以及特征表中的每个特征/值组合。每行p.id一行 – dglickler 2015-04-02 17:52:30

+0

它是行还是列?对于不同列中的值出现在同一列中,可以在select子句中使用concat:CONCAT(f.feature,',',f.desc)。 – user4704642 2015-04-02 18:06:49

+0

我结束了使用CONCAT_W以逗号和分号分隔的GROUP_CONCAT,它工作。 – dglickler 2015-04-02 18:21:47