动态列名称取决于查询结果的单行

伊万·尼科洛夫(Ivan Nikolov)

我需要有关SQL查询中动态列名称的帮助。首先,我将尝试解释我的数据库结构,然后是问题。

数据库结构:

admin_group表:

+--------+----------------+
| id     | language_code  |
+--------+----------------+
| 1      | en_UK          | 
| 2      | de_DE          | 
| 3      | es_ES          |
+--------+----------------+

constructions_meta表:

+--------+-----------------+----------+
| id     | admin_group_FK  | value    |
+--------+-----------------+----------+
| 1      | 1               | 0.13     |
| 2      | 2               | 0.12     |
| 3      | 3               | 0.10     |
+--------+-----------------+----------+

construction_lang表:

+--------+-----------------+----------------+----------------+
| id     | en_UK_name      | de_DE_name     |es_ES_name      |
+--------+-----------------+----------------+----------------+
| 1      | Construction 1  | Konstruktion 1 | Construcción 1 |       
| 2      | Construction 2  | Konstruktion 2 | Construcción 2 |  
| 3      | Construction 3  | Konstruktion 3 | Construcción 3 |  
+--------+-----------------+----------------+----------------+

这些是我在数据库中的表。我在这里需要获取有关每个结构的语言代码的结构名称。例如,我想列出以下结构:

  1. 施工1
  2. 施工2
  3. 施工3
罗伯·贝利(Rob Baillie)

两遍操作可能最容易做到。这将使您能够扩展construction_lang表的宽度,而不会显着影响SQL语句。

首先,您发出一条SQL语句以获取所需的列名,然后使用该结果集构建第二条SQL语句,该语句将为您获取名称。

这不是理想的解决方案,因为它正在围绕数据模型运行。

给定一个查询,该查询返回admin_group的ID和语言,其符合以下条件:

array( array( 'id' => 1, 'language_code' => 'en_UK' ),
       array( 'id' => 2, 'language_code' => 'de_DE' ),
       array( 'id' => 3, 'language_code' => 'es_ES' ) )

您可以使用以下内容构建一条语句(使用diarmuid的其他答案作为示例)

$sql = "select c.id , (select case c.admin_group_FK\r\n";
foreach( $languages as $thisLanguage ) {
   $sql .= "when {$thisLanguage['id']} then l.${thisLanguage['language_code']}_name\r\n";
}
$sql .= ...

由于您拥有数据模型,因此这是一种绕行方式。理想情况下,您不需要“动态” SQL。

如果您想消除回旋现象,并根据标准关系数据库理论构建更多内容,则可以更改模型,以使construction_lang表更像这样:

+------------------------+-----------------+----------------+
| constructions_meta_fk  | language        | name           |
+------------------------+-----------------+----------------+
| 1                      | en_UK           | Construction 1 |
| 1                      | de_DE           | Konstruktion 1 |
| 1                      | es_ES           | Construcción 1 |
| 2                      | en_UK           | Construction 2 |
| 2                      | de_DE           | Konstruktion 2 |
| 2                      | es_ES           | Construcción 2 |
| 3                      | en_UK           | Construction 3 |
| 3                      | de_DE           | Konstruktion 3 |
| 3                      | es_ES           | Construcción 3 |
+------------------------+-----------------+----------------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查询结果取决于单独查询的结果

来自分类Dev

MySQL递归查询取决于结果

来自分类Dev

划分查询结果取决于数据

来自分类Dev

R-取决于列名称的禁用操作按钮

来自分类Dev

sqlalchemy查询:结果列名称

来自分类Dev

动态Querydsl筛选器谓词取决于搜索结果

来自分类Dev

如何动态创建集合名称(取决于用户信息)

来自分类Dev

过载取决于lambda的结果

来自分类Dev

MySQL选择取决于结果

来自分类Dev

MySQL选择取决于结果

来自分类Dev

如何选择取决于其他列内容或列名称的列

来自分类Dev

SUM和减法结果取决于Mysql查询中的列结果

来自分类Dev

SUM和减法结果取决于Mysql查询中的列结果

来自分类Dev

单行获取查询结果?

来自分类Dev

PostgreSQL查询结果取决于同一张表的几行

来自分类Dev

简单的select查询在postgres数据库中不返回结果,具体取决于用户

来自分类Dev

MySQL-使用SET语句的UPDATE查询取决于前一个SET语句的结果

来自分类Dev

不同结果取决于打印要求

来自分类Dev

为什么结果取决于Have子句

来自分类Dev

链式Kotlin流量取决于结果状态

来自分类Dev

Mojolicious动态路线动作取决于状态

来自分类Dev

动态字段取决于WTForms的先前字段

来自分类Dev

动态更改UITextField宽度取决于内容

来自分类Dev

动态子集取决于R中的值

来自分类Dev

动态内容取决于工作日

来自分类Dev

动态内容取决于CSS类

来自分类Dev

父母的风格取决于孩子的动态价值

来自分类Dev

CardView动态阴影不仅取决于仰角

来自分类Dev

动态更改UITextField宽度取决于内容