2011-11-13 38 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

相关问题