0

私は以下のようなテーブルセットアップを持っています:

CREATE table TABLE_prices
(
PRICE_ID int unsigned not null auto_increment primary key,
RANGE1_START int,
RANGE1_END int,
RANGE1_PRICE decimal(10,2),
RANGE2_START int,
RANGE2_END int,
RANGE2_PRICE decimal(10,2),    
RANGE3_START int,
RANGE3_END int,
RANGE3_PRICE decimal(10,2)
);

値(例として100)がある場合、値がどの範囲に含まれるかに基づいてRANGE#_PRICEを取得するためのselectステートメントを作成する方法はありますか?

私の本能は、おそらくMySQLから範囲データを抽出し、PHPでそれを反復処理する必要があるということですが、MySQLでそれを正しくカットする方法があるかどうかはわかりませんでした。

ありがとうございました!

4

2 に答える 2

0

この醜い解決策を試してください:

SELECT
  PRICE_ID,
  COALESCE(
            CASE WHEN @value BETWEEN RANGE1_START AND RANGE1_END THEN RANGE1_PRICE END,
            CASE WHEN @value BETWEEN RANGE2_START AND RANGE2_END THEN RANGE2_PRICE END,
            CASE WHEN @value BETWEEN RANGE3_START AND RANGE3_END THEN RANGE3_PRICE END
          ) Price
FROM TABLE_prices
于 2013-01-27T19:59:49.790 に答える
0

あなたが何を達成しようとしているのかわかりませんが、1つのステートメントでそれを行うことができます:

$price = 100;

$sql = "
(
  SELECT 1 as range, price_id, range1_start as range_start, range1_end as range_end FROM table_prices WHERE range1_start >= $price AND range1_end <= $price
) UNION
(
  SELECT 2 as range, price_id, range2_start as range_start, range2_end as range_end FROM table_prices WHERE range2_start >= $price AND range2_end <= $price
) UNION
(
  SELECT 3 as range, price_id, range3_start as range_start, range3_end as range_end FROM table_prices WHERE range3_start >= $price AND range3_end <= $price
)";
于 2013-01-27T20:02:12.690 に答える