组值有在一列中相同的名称和ID在另一列
问题描述:
我有以下情况:组值有在一列中相同的名称和ID在另一列
与我当前的查询,这是我如何得到我的数据:
问题是我想结合straat
和plaatsnaam
并将它们读为一行。每个straat
与其对应的plaatsnaam
具有相同的value_item_id
。
是否有可能采取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
的平原和straat。如果是这样,则仅从表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;
+0
谢谢,这正是我需要的结果! – twan
答
你可以使用的过滤表
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'
答
使用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
样本输出请 – L30n1d45
什么是你想要的结果吗?你如何处理不同的身份证件? – Stephen
在名称和值字段中使用group_concat,并按select中的所有其他字段进行分组。 – xQbert