我有MySQL database
。有一个带有项目标记的日志表。我需要找出每个项目有什么标记,以及专家有没有投票给这个项目。所以,表的结构是这样的:
| ID_MARK | ID_EXPERT | ID_PROJECT | mark_1 | mark_2 | ... | mark_n | TOTAL_MARK |
---------------------------------------------------------------------------------
| 1 | 1 | 1 | x | x | ... | x | 12 |
| 2 | 1 | 2 | x | x | ... | x | 13 |
| 3 | 2 | 1 | x | x | ... | x | 42 |
| 4 | 1 | 3 | x | x | ... | x | 34 |
| 5 | 2 | 3 | x | x | ... | x | 22 |
| 6 | 3 | 4 | x | x | ... | x | 55 |
| 7 | 3 | 2 | x | x | ... | x | 11 |
我想通过一些查询获得的结构是:
project id | ID_EXPERT_1 | ID_EXPERT_2 | ID_EXPERT_3 | ID_EXPERT_4 |
1 | 12 | 42 | null | null |
2 | 13 | null | 11 | null |
3 | 34 | 22 | null | null |
4 | null | null | 55 | null |
我知道如何通过小请求在数据库外部创建这一切,但我想升级我的知识以便能够创建这样的硬查询。该查询可能效率不高或速度不快,但这里没有必要。
我读过有关虚拟表但不确定是否可以在这里使用mysql实现它们?
使用MySQL可以用什么来创建这样的查询结果?
在标记为重复之前:
我在stackoverflow上读到了有关pivot的信息。我的问题更深入。
在stackoverflow的其他示例中,人们展示了查询实践,他们知道了潜在列的数量,并编写了完全相同的case语句。我的问题是如何进行查询,这将解决这个问题。这将创建一个像我在编程语言中所做的查询,如:
$experts = get_experts_ids_from_db();
foreach($experts as $expert){
...
}
我知道可以在长查询文本中的MsSQL中创建@variables和虚拟表来存储临时数据。但是在mysql中是否可能?