我有一个看起来有点像这样的数据库表(为了清晰起见而剥离):
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);
但是这个问题接近于我在技术上允许做什么以及我愿意在架构上做什么。以明确定义的方式进行此类查询所需的代码库更改几乎比其值得的结果更为昂贵。
那么,你们这些建筑师是什么呢? 我怎样才能尽可能高效地做到这一点?
答案 0 :(得分:3)
为什么不创建一个类,它会为每个输入保持独特的颜色,并让它通过另一个表或仅在硬盘上保存它的设置?
如果你真的无法修改数据库,那么我认为创建一个会添加颜色的sql语句会让事情复杂化。当有人说两种颜色太相似而他们希望你更多地改变它们时会发生什么?在另一个类中管理它会更容易