2015-04-02 42 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