2011-11-13 73 views
3

我想使用字段名稱來確定將用於搜索的列,但首先我必須使用名稱來查找列ID,然後將列ID與字符串連接以獲取實際列名稱。我現在正在處理兩個查詢,但我想將它們合併爲一個查詢。在MySQL中,結合查詢以獲得列名,並在該列上獲得第二個查詢

例如,我想搜索「fool = true」。在第一張表中,我發現「傻瓜」的值在第二張表的第一列。在第二個表格中,我搜索real,查找「field_id_1 = true」。

此表將名稱映射到第二個表中使用的列ID。

exp_channel_fields 
+field_id +field_name + 
|---------|-----------| 
|1  |fool  | 
|2  |money  | 
+---------+-----------| 

此表具有要搜索的數據,但列名與上一步的ID不完全匹配。我要在前面加上「field_id_」來之前我找到了ID:

exp_channel_data 
+entry_id+field_id_1 +field_id_2 + 
|--------|-----------|-----------| 
|837  |true  |$500  | 
|838  |false  |$50,000 | 
+--------+-----------+-----------+ 

下面是我用的第一個查詢,我將結果存儲到$ myFieldID。

SELECT field_id as tField_id FROM exp_channel_fields 
WHERE field_name = 'fool' 

然後我用結果來建立第二個查詢:

SELECT 
    GROUP_CONCAT(entry_id ORDER BY entry_id SEPARATOR '|') 
    AS result_entries 
FROM exp_channel_data 
WHERE field_id_{$myFieldID} = "true" 

有沒有辦法將這些組合成一個單一的查詢?提前致謝!

+0

我想是不是可以這樣做: http://stackoverflow.com/questions/985842/mysql-concat-to-create-column -names – phoet

+0

我會研究服務器準備的語句。這至少會消除我現在使用的PHP代碼來使用從一個查詢返回的值來構造第二個查詢。 – Mike3d0g

+0

@phoet,您的評論是最有幫助的答案。一,不可能直接做我所問的。二,鏈接到服務器準備的語句*幾乎*提供了我需要的解決方法。 (唉,ExpressionEngine阻止服務器準備好的語句。)您想重新發布您的評論作爲答案嗎? – Mike3d0g

回答

0

您的數據庫不正確。你應該UNPIVOT的行列,以使這種querys的:

exp_channel_fields 
+field_id +field_name + 
|---------|-----------| 
|1  |fool  | 
|2  |money  | 
+---------+-----------| 


exp_channel_data 
+entry_id+field_id + value 
|--------|-----------|-----------| 
|837  |1   |true  | 
|837  |2   |$500  | 
|838  |1   |False  | 
|838  |2   |$50,000 | 
+--------+-----------+-----------+ 

然後查詢是很容易的:

選擇FIELD_ID作爲tField_id FROM exp_channel_fields 其中field_name = '傻瓜'

SELECT 
    GROUP_CONCAT(entry_id ORDER BY entry_id SEPARATOR '|') 
    AS result_entries 
FROM 
    exp_channel_data inner join 
    exp_channel_fields 
    on exp_channel_data.field_id = exp_channel_data.field_id 
WHERE value = "true" 

也許你會需要exp_channel_fields的table-base和sub-tables,因爲不同的值類型。

+0

不幸的是,我無法更改表格。這是他們在ExpressionEngine CMS中佈局的方式。謝謝,雖然爲例。我會記住未來的項目。 – Mike3d0g

+0

您可以創建視圖。 – danihp

相關問題