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

つまり、すべての「1」トラックは「#000000」色である必要があり、すべての「2」トラックは「#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ステートメントを作成すると事態が複雑になると思います。誰かが2つの色があまりにも似ているので、もっと色を変えてほしいと言ったらどうなりますか?別のクラスでそれを管理する方が簡単になります

于 2012-10-03T20:32:32.893 に答える