php mysql从多列中选择最低值

时间:2013-10-13 15:42:13

标签: php mysql

我有这种情况的数据库:

表酒店----->表酒店价格

表酒店:

hotel_id | hotel_name |
1            hotel1
2            hotel2
表酒店价格

price_id |  hotel_id | room_type |  single | Double | extra |
1              1         superior      5       10        20
2              1          deluxe       3        5        10

我将从hotel1

显示最低价格

hotel1 star来自“最小值”

我试过这个但不能正常工作

$query = ("SELECT LEAST(COL1,COL2,COL3) FROM rug WHERE COL1 != '' AND COL2!= '' AND COL3 != ''");
$result=mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());}
$num=mysql_numrows($result);
$i=0;
while ($i < $num) 
{
$pricing[$i]=mysql_result($result, $i);
$i++;
}
sort($pricing);
$lowest_price = $pricing[0]; //lowest price

感谢雷蒙德的答案,这几乎是正确的

select
*
, least(single, `double`, extra) as lowest_price
from hotel_price
where
hotel_id = 1
order by
lowest_price
;

这将在酒店价格表中显示lowest_price列

PRICE_ID HOTEL_ID ROOM_TYPE单双超级酒店'LOWEST_PRICE 2 1豪华3 5 10 hotel1 3 1 1高级5 10 20 hotel1 5

但我希望只显示最低价格列的最低价格

最小的是 3

有什么想法?谢谢!

2 个答案:

答案 0 :(得分:0)

根据您的SQL语法,我认为您使用的是MySQL。你可以通过这种方法解决这个问题:

SELECT

(SELECT COL1 from rug) as myField

UNION 
(SELECT COL2 from rug)

UNION 
(SELECT COL3 from rug)

order by myField ASC LIMIT 1

答案 1 :(得分:0)

不完全确定你是否需要这个..

如果您知道名为“hotel1”的酒店的ID已经

select
 *
 , least(single, `double`, extra) as lowest_price
from hotel_price
where
 hotel_id = 1
order by
 lowest_price
;

如果您不知道您需要加入的酒店的身份证件

select
 *
 , least(single, `double`, extra) as lowest_price
from
 hotel_price
inner join 
 hotel
on
 hotel_price.hotel_id = hotel.hotel_id
where
 hotel.hotel_name = 'hotel1'
order by
 lowest_price
;

请参阅http://sqlfiddle.com/#!2/f947b/3了解演示说明,演示有更多查询可以为您提供相同的结果