MySQL选择行和分组
我有一个名为MySQL选择行和分组,mysql,database,join,subquery,grouping,Mysql,Database,Join,Subquery,Grouping,我有一个名为field\u values的(Joomla)数据库表,内容如下 +----+----------+---------+---------+ | id | field_id | item_id | value | +----+----------+---------+---------+ | 1 | 2 | 446 | Jones | | 2 | 2 | 447 | Smith | | 3 | 2 | 448
field\u values
的(Joomla)数据库表,内容如下
+----+----------+---------+---------+
| id | field_id | item_id | value |
+----+----------+---------+---------+
| 1 | 2 | 446 | Jones |
| 2 | 2 | 447 | Smith |
| 3 | 2 | 448 | Jenkins |
| 4 | 3 | 446 | Paul |
| 5 | 3 | 447 | Peter |
| 6 | 3 | 448 | Sally |
| 7 | 4 | 446 | London |
| 8 | 4 | 447 | Dublin |
| 9 | 4 | 448 | Paris |
+----+----------+---------+---------+
我只显示表中的9行,但实际上我有数千行,因此成功的查询需要考虑这一点
栏目解释
- id(主/自动增量)
- 字段id(FK到另一个
字段
表,
=姓氏,2
=名字,3
=位置)4
- 项目id(FK到另一个
表)用户
- 值(字段的内容)
+------------+-----------+----------+
| first_name | last_name | location |
+------------+-----------+----------+
| Paul | Jones | London |
| Peter | Smith | Dublin |
| Sally | Jenkins | Paris |
+------------+-----------+----------+
在上面想要的结果中,id
字段并不是必需的,我只是添加它来强调每一行都是唯一的
我不确定是否需要使用子查询或分组依据,也许两者都不需要
提前感谢。您可以通过以下方式避免子查询和分组。 你可以使用同一张桌子三次
select a.id, b.value firts_name, a.value last_name , c.value location
from field_values a
inner join field_values b on a.item_id = b.item_id and b.field_id = 3
inner join field_values bc on a.item_id = c.item_id and b.field_id = 4
where a.item_id = 2
pivot查询应在以下位置工作:
SELECT
MAX(CASE WHEN field_id = 3 THEN value END) AS first_name,
MAX(CASE WHEN field_id = 2 THEN value END) AS last_name,
MAX(CASE WHEN field_id = 4 THEN value END) AS location
FROM yourTable
GROUP BY
item_id
ORDER BY
item_id;
您当前的表结构是非规范化的键值存储,WordPress在其某些表中使用这种样式。我真的不理解结果集中
id
的含义您的意思是说您希望数据透视输出中有数千列吗?我上面所写的是在不使用动态SQL的情况下所能做的最好的事情,例如在存储过程中。@TheoredinaryGeek如果您有数千个不同的实体(item_id),上面的工作就可以了。对于数以千计的不同属性(FieldIdID),请考虑在应用程序代码中管理这些属性。无论如何,现在你知道谷歌的术语了!好的…你有数千个用户,数千个属性,还是两者都有?