我想使用字段名来确定我将用于搜索的列,但首先我必须使用该名称来查找列ID,然后将列ID与字符串连接以获取实际的列名。我现在正在处理两个查询,但我想将它们组合成一个查询。
例如,我想搜索“fool = true”。在第一个表中,我发现“傻瓜”的值在第二个表的第1列中。在第二个表格中,我执行 real 搜索,对于“field_id_1 = true”。
此表将名称映射到第二个表中使用的列ID。
exp_channel_fields
+field_id +field_name +
|---------|-----------|
|1 |fool |
|2 |money |
+---------+-----------|
此表包含我要搜索的数据,但列名与前一步的ID不完全匹配。我必须在我之前找到的ID前面添加“field_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 :(得分:1)
不可能将查询结果用作列名,但您可以使用服务器端预处理语句来实现类似的行为。看看这个问题:
MySQL concat() to create column names to be used in a query?
答案 1 :(得分:0)
您的数据库未正确规范化。您应该将列拆分为行以进行此类查询:
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 |
+--------+-----------+-----------+
然后查询非常简单:
SELECT field_id as tField_id FROM exp_channel_fields WHERE 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的表格和子表,因为不同的值类型。