我有以下情况:
对于当前查询,这是我如何获取数据的方式:
问题是我想组合straat
和plaatsnaam
并将它们读为一行。每个straat
与它的value_item_id
具有相同的plaatsnaam
。
是否可以使用straat
和plaatsnaam
并按它们的value_item_id
将它们分组在一起?
我当前的查询如下所示:
SELECT fields.id as field_id,
fields.name,
fields_categories.field_id as catfield_id,
fields_values.field_id as fieldvalue_id,
fields_values.item_id as value_item_id,
fields_values.value,
content.id as content_id
FROM snm_fields fields
INNER JOIN snm_fields_categories fields_categories
ON fields.id = fields_categories.field_id
INNER JOIN snm_fields_values fields_values
ON fields_categories.field_id = fields_values.field_id
INNER JOIN snm_content content
ON content.id = fields_values.item_id
WHERE fields.name in ('straat', 'plaatsnaam')
最后,我想在同一行中包含
Ridderstraat 5
和Heenvliet
。我知道也可以使用PHP来完成,但是我认为直接使用SQL会更好。 最佳答案
看来您只是想要每个item_id
的辫子和细纹。如果是这样,仅从表snm_fields
和snm_fields_values
中读取就足够了。对每个item_id
使用条件聚合:
select
fv.item_id,
max(case when f.name = 'plaatsnaam' then fv.value end) as plaats,
max(case when f.name = 'straat' then fv.value end) as straat
from snm_fields_values fv
join snm_fields f on f.id = fv.field_id
group by fv.item_id
order by fv.item_id, plaats, straat;
或者,如果您可以让查询知道ID,即使可以:
select
item_id,
max(case when field_id = 3 then value end) as plaats,
max(case when field_id = 1 then value end) as straat
from snm_fields_values
group by item_id
order by item_id, plaats, straat;