2017-10-19 4 views
0

私は次のような状況があります。私の現在のクエリでグループ値

を、これは私が私のデータを取得する方法である:

enter image description here

問題は、straatplaatsnaamを組み合わせて1行として読みたいということです。各straatは、対応するplaatsnaamと同じvalue_item_idを持っています。

straatplaatsnaamをそれぞれvalue_item_idでグループ化できますか?私は、同じ行のRidderstraat 5Heenvlietを持ちたい最後に

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') 

私の現在のクエリは次のようになります。私はこれもPHPで行うことができます知っているが、私はこれを直接SQLで行うことが良いと思います。

+0

サンプル出力を – L30n1d45

+0

ご希望の結果は何してください?違う 'Id'sで何をしていますか? – Stephen

+0

名前と値のフィールドでgroup_concatを使用し、selectの他のすべてのフィールドでグループ化します。 – xQbert

答えて

1

あなたが単にitem_idあたりplaatsとstraatをしたいようです。その場合は、テーブル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; 
+0

ありがとう、これは私が必要とした結果です! – twan

1

あなたは

SELECT 
     fields1.id as field_id 
     , fields1.name 
     , fields1_categories.field_id as catfield_id 
     , fields1_values.field_id as fieldvalue_id 
     , fields1_values.item_id as value_item_id 
     , fields1_values.value 
     , content.id as content_id 
     , fields2.id as field_id 
     , fields2.name 
     , fields2_categories.field_id as catfield_id 
     , fields2_values.field_id as fieldvalue_id 
     , fields2_values.item_id as value_item_id 
     , fields2_values.value 
    FROM snm_fields fields1 
    INNER JOIN (
     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 
     FROM snm_fields fields 
     WHERE fields.name = 'plaatsnaam') 

    ) on field2 ON field1.value_item_id = field2.value_item_id 
    INNER JOIN snm_fields_categories fields_categories ON fields.id = fields_categories.field_id 
    INNER JOIN snm_content content 
    WHERE fields.name = 'straat' 
1

使用GROUP_CONCAT機能フィルタのテーブルに参加を使用することができます。

SELECT value_item_id, 
     GROUP_CONCAT(name SEPARATOR ' ') as grouped_name, 
     GROUP_CONCAT(value SEPARATOR ' ') as grouped_value, 
FROM (the_query) src 
GROUP BY value_item_id