0

私はApexアプリケーションを持っています。これには、ユーザーがさまざまな値を選択して、接続されたデータベースにクエリを実行できるようにするいくつかのドロップダウンバーが含まれています。基本的に、クエリはその中に置かれた条件のために巨大になりつつあります。条件は、すべてのドロップダウン内の各値をチェックするか、それらがnullかどうかなどです。私が持っている質問は、入力されるデータのすべての可能な組み合わせを書き込む必要がないように、クエリを単純化することです。このフィールドがnullのように、これはnullではありませんが、これはなどです。

条件がどのように見えるかの例-

OR
(plant_type.plant_type = :P1_PLANT_TYPE AND plant.plant_name = :P1_PLANT_NAME AND :P3_SOIL IS NULL AND :P3_SUNLIGHT IS NULL)
OR 
(plant_type.plant_type = :P1_PLANT_TYPE AND :P1_PLANT_NAME IS NULL AND :P3_SOIL IS NULL AND :P3_SUNLIGHT IS NULL) 
OR
(sunlight_conditions.condition_details = :P3_SUNLIGHT AND :P3_SOIL IS NULL AND plant_type.plant_type = :P1_PLANT_TYPE AND plant.plant_name = :P1_PLANT_NAME)
OR
(soil_conditions.soil_condition = :P3_SOIL AND :P3_SUNLIGHT IS NULL AND plant_type.plant_type = :P1_PLANT_TYPE AND plant.plant_name = :P1_PLANT_NAME)
4

2 に答える 2

0

多くの組み合わせが、一部のアイテムをnullにすることを「許可」しているようです。

そのための1つの方法は、すべての組み合わせを使用することですが、COALESCEを使用すると真の状態になります。たとえば、そこにリストしたすべてのアイテムを次のように変更することもできます

 plant_type.plant_type = COALESCE(:P1_PLANT_TYPE,plant_type.plant_type) AND 
 plant.plant_name = COALESCE(:P1_PLANT_NAME, plant.plant_name) AND
 soil_conditions.soil_condition = COALESCE(:P3_SOIL,soil_conditions.soil_condition) AND
 sunlight_conditions.condition_details = COALESCE(:P3_SUNLIGHT,sunlight_conditions.condition_details)

上記がロジックルールを満たしていない場合があります。その場合、参加する条件テーブルを作成する必要があるかもしれません。その表は、どのアイテムが他のどのアイテムと「一緒に行く」かの論理を説明することができます。

必要かどうか、そしてそれがどのように作成されるかを理解するために、すべてのビジネスルールを確認する必要がありますが、それが場所が制御不能になった場合の最良の方法です。結局のところ、それはリレーショナルデータベースです。..それを解決するために関係を作りましょう!

于 2013-01-09T19:47:32.987 に答える
0

より良い方法は、次のように、すべてのクエリ条件を1回だけ含めることです。

(plant_type.plant_type = :P1_PLANT_TYPE or :P1_PLANT_TYPE IS NULL)
and
(plant.plant_name = :P1_PLANT_NAME or :P1_PLANT_NAME IS NULL)
and
(sunlight_conditions.condition_details = :P3_SUNLIGHT or :P3_SUNLIGHT IS NULL)
and
(soil_conditions.soil_condition = :P3_SOIL or :P3_SOIL IS NULL)

もちろん、それらの間にOR条件が必要かどうか、またはAND条件が必要かどうかによって異なります。通常はANDなので、私の答えが役に立ちます。

于 2013-01-09T19:42:29.407 に答える