我想使用字段名称来确定将用于搜索的列,但首先我必须使用名称来查找列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"
有没有办法将这些组合成一个单一的查询?提前致谢!
我想是不是可以这样做: http://stackoverflow.com/questions/985842/mysql-concat-to-create-column -names – phoet
我会研究服务器准备的语句。这至少会消除我现在使用的PHP代码来使用从一个查询返回的值来构造第二个查询。 – Mike3d0g
@phoet,您的评论是最有帮助的答案。一,不可能直接做我所问的。二,链接到服务器准备的语句*几乎*提供了我需要的解决方法。 (唉,ExpressionEngine阻止服务器准备好的语句。)您想重新发布您的评论作为答案吗? – Mike3d0g