我有以下情况:

对于当前查询,这是我如何获取数据的方式:

mysql - 一列中具有相同名称而另一列中具有相同ID的组值-LMLPHP

问题是我想组合straatplaatsnaam并将它们读为一行。每个straat与它的value_item_id具有相同的plaatsnaam

是否可以使用straatplaatsnaam并按它们的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 5Heenvliet。我知道也可以使用PHP来完成,但是我认为直接使用SQL会更好。

最佳答案

看来您只是想要每个item_id的辫子和细纹。如果是这样,仅从表snm_fieldssnm_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;

07-26 03:40