[英]PHP MySQL select based on range across multiple columns
我有一个类似于以下的表格设置:
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),是否有一种方法可以构建一个select语句以根据值所属的范围来获取RANGE#_PRICE?
我的直觉是,我可能将不得不从MySQL中提取范围数据,并在PHP中对其进行迭代,但是我不知道是否有一种方法可以使用MySQL进行修改。
谢谢!
试试这个难看的解决方案:
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
我不知道您要达到什么目的,但是您可以在一个语句中做到:
$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
)";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.