0

大家好!

我有一个看起来有点像这样的数据库表(为了清楚起见,去掉了):

customer
====================
 name    |    track
====================
 John    |    one
 Sue     |    two
 Greg    |    one
 Loreen  |    three
 Niles   |    two

现在,我想通过我的 select 语句为每个独特的轨道生成一种新颜色,例如:

SELECT name, track, ('#' || HEX(RANDOMBLOB(3))) AS color
FROM customer;

不幸的是,我无法修改表格内容或数据库结构,因此,我不得不动态生成颜色。上面的SELECT查询产生如下内容:

 name    |    track    |    color
====================================
 John    |    one      |    #000000
 Sue     |    two      |    #444444
 Greg    |    one      |    #888888
 Loreen  |    three    |    #CCCCCC
 Niles   |    two      |    #FFFFFF

即每行的新颜色。但这不是我想要的!我希望所有独特的曲目保持相同的颜色,如下所示:

 name    |    track    |    color
====================================
 John    |    one      |    #000000
 Sue     |    two      |    #444444
 Greg    |    one      |    #000000
 Loreen  |    three    |    #888888
 Niles   |    two      |    #444444

即所有“一个”轨道都应该有“#000000”颜色,所有“两个”轨道应该有“#444444”颜色等等。

如前所述,我没有更改数据库的奢侈,我只能查询它。另外:它是在 Android 设备上运行的 SQLite 数据库,所以我也负担不起那些毛茸茸的服务器端查询。

到目前为止我的努力:

到目前为止,我提出了以下查询:

SELECT a.name, a.track, b.color
FROM 'customer' AS a
LEFT JOIN (
    SELECT track, ('#' || HEX(RANDOMBLOB(3))) AS color
    FROM 'customer'
    GROUP BY track) AS b
ON (b.track == a.track);

但这个问题与我在技术上被允许做的事情以及我在架构上愿意做的事情接壤。以明确定义的方式进行此类查询所需的代码库更改几乎比它的结果更昂贵。

那么,各位建筑师,你们怎么说?我怎样才能尽可能有效地做到这一点?

4

1 回答 1

3

为什么不创建一个类来维护每个输入的唯一颜色,并让它通过另一个表或仅在硬盘上保留它的设置?

如果您真的无法修改数据库,那么我认为创建一个将添加颜色的 sql 语句只会使事情复杂化。当有人说两种颜色太相似所以他们希望你改变它们时会发生什么?在另一个班级中更容易管理

于 2012-10-03T20:32:32.893 回答