2010-11-12 60 views
0

我要找的SQL做:Mysql的選擇動態柱(3臺)

而且件事字段列表必須是完全動態的。每次管理員將字段添加到字段表中時,我都不想更改我的SQL。

Table content 
    ------------- 
    CID 
    text 
    category 

    CID | text | category 
    ---------------------- 
    1 | ... | apple 
    2 | ... | apple 
    3 | ... | apple 

    Table fields 
    ------------- 
    FID 
    typename 

    FID | typename 
    ---------------- 
    1 | field1 
    2 | field2 
    3 | field3 

    Table fields_value 
    ------------- 
    CID 
    FID 
    value 

    CID | FID | value 
    ------------------- 
    1 | 1 | value1 
    1 | 2 | value2 
    1 | 3 | value3 
    2 | 1 | value4 
    2 | 2 | value5 
    2 | 3 | value6 
    3 | 1 | value7 
    3 | 2 | value8 
    3 | 3 | value9 

    ##### 
    ---> ???? SELECT content.*,...dynamic field.* FROM content WHERE category = "apple" LIMIT 20 

    RESULT I AM LOOKING FOR: 
    ------------------- 
    CID | text | category | field1 | field2 | field3 
    ------------------------------------------------- 
    1 | ... | apple | value1 | value2 | value3 
    2 | ... | apple | value4 | value5 | value6 
    3 | ... | apple | value7 | value8 | value9 
+1

可能重複:http://stackoverflow.com/questions/2843510/database-eav-model-record-listing-as-per-search – BenV 2010-11-12 20:33:25

回答

0

有沒有辦法做你想用mysql(有動態命名列)什麼。你可以做的最接近的是

SELECT CID, text, category, typename, value 
    FROM content JOIN fields_value JOIN fields 
    WHERE content.CID = fields_value.CID AND fields_value.FID = fields.FID 

,這將給你

CID | text | category | typename | value 
1 | ... | apple | field1 | value1 
1 | ... | apple | field2 | value2 
1 | ... | apple | field3 | value3 
2 | ... | apple | field1 | value4 
2 | ... | apple | field2 | value5 
2 | ... | apple | field3 | value6 
3 | ... | apple | field1 | value7 
3 | ... | apple | field2 | value8 
3 | ... | apple | field3 | value9 

當然,你可以通過加載fields表,並建設有你想要的字段CREATE TABLE命令,然後做一個表動態從fields_value表填充它,但這可能不是你想要的。

+0

嗨。 ty爲答案。但我找到了一種方法。我必須首先知道場地名單。所以我在之前的字段表中進行了選擇。在PHP後,我建立了一個左連接和一個字段選擇每個領域。 – 2010-11-16 16:25:14