SQLite:为每个唯一列值生成一种新颜色

时间:2012-10-03 20:24:52

标签: android sqlite

大家好!

我有一个看起来有点像这样的数据库表(为了清晰起见而剥离):

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

即。所有'one'曲目应该有'#000000'颜色,所有'two'曲目都应该有'#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);

但是这个问题接近于我在技术上允许做什么以及我愿意在架构上做什么。以明确定义的方式进行此类查询所需的代码库更改几乎比其值得的结果更为昂贵。

那么,你们这些建筑师是什么呢? 我怎样才能尽可能高效地做到这一点?

1 个答案:

答案 0 :(得分:3)

为什么不创建一个类,它会为每个输入保持独特的颜色,并让它通过另一个表或仅在硬盘上保存它的设置?

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