我有以下代码:
while ($row = mysql_fetch_array($result)){
$que ='select SUM(price) from prices_adverts where advert_id="7" and room_type_id="54" and (date >= "2013-09-20" AND date <"2013-09-21") order by price';
$que ='select SUM(price) from prices_adverts where advert_id="7" and room_type_id="55" and (date >= "2013-09-20" AND date <"2013-09-21") order by price'; and etc
$res=mysql_query($que) or die();
$rw=mysql_fetch_row($res);
$price= $rw['0'];
}
这会返回一些记录,这些记录在数据库中有价格,而NULL表示$ price,记录不存在/当房间没有特定日期的价格时,表中不存在/ 所以我的问题是如何才能获得仅存在的记录的结果?我不需要价格的NULL值,是否有可能在外面访问$ price?怎么样?请帮助,谢谢
我可以解释一下我需要什么,这可以帮助你帮助我:) 上面我正在循环酒店房间,以检查特定时期的房间费用。比我需要绘制外部循环按钮,将访客转移到预订页面。但如果酒店的日期没有房价,我希望没有预订按钮。这就是为什么我需要弄清楚至少有一个房间价格在酒店或不..希望这有帮助
################################################## ######更新第一个问题:我要带所有伦敦酒店的id-s
select id from adverts where town="London" limit 0, 5
大于
for($i=0;$i<$num_rows;$i++){
$row=mysql_fetch_row($result);
echo echo_multy_htl_results($row[0]);
}
这个函数echo_multy_htl_results是:
select a.article_title, a.town, a.small_image, a.plain_text, a.star_rating, a.numberrooms, rta.room_type_id, rt.bg_room_type,a.longitude, a.latitude, a.link_name, a.id from adverts a, rooms_to_adverts rta,room_types rt where a.id = rta.advert_id and rta.advert_id="3" and rta.room_type_id=rt.id and rt.occupants>="1" group by rt.bg_room_type order by rt.occupants ASC
它获取了html酒店广场和room_types_id-s的信息,并且它已经添加了鳕鱼..你会建议什么?
答案 0 :(得分:1)
可能通过添加AND price IS NOT NULL
?
答案 1 :(得分:1)
手头的即时问题的解决方案可以是此查询:
select SUM(price)
from prices_adverts
where advert_id="7"
and room_type_id="54" -- notice, we are filtering on room type here
and (date >= "2013-09-20" AND date <"2013-09-21")
group by room_type_id -- this makes no rows appear when there are no rows found in this case
order by price
当有相应的行时返回1行,没有时返回0行。
然而,您的问题似乎有所不同。你的运作方案似乎是这样的:
这很糟糕。数据库非常善于使用JOIN和其他适当的子句来解决这些问题。我建议使用这些功能,并在脑海中扭转局面。这样,您可以发出一个返回所需数据的查询。我相信这个可能是这样的查询,提供所有房型ID及其总价:
select room_type_id, SUM(price)
from prices_adverts
where advert_id="7" -- notice: no filtering for room_type_id this time
and (date >= "2013-09-20" AND date <"2013-09-21")
group by room_type_id
order by price
此查询列出了所有具有记录的room_type_ids,并且没有列出那些没有记录的room_type_ids,并且在每个不同的type_id旁边,它具有总计价格。您可以在此SQL fiddle中查看结果。 (数据类型显然是关闭的,这只是为了显示它的运行)
修改强> 要使广告ID类似于room_type_ids:
select advert_id, room_type_id, SUM(price)
from prices_adverts
where (date >= "2013-09-20" AND date <"2013-09-21")
-- notice: no filtering for room_type_id or advert id this time
group by advert_id, room_type_id
order by price
这将有三列:advert_id,room_type_id和总计价格......
答案 2 :(得分:0)
您可以使用
sum(case when price is null then 0 else price end)
或
sum(isnull(price,0))
或
just add in your where clause `price is not null` to exclude them.
答案 3 :(得分:0)
你需要使用HAVING
select SUM(price)
from prices_adverts
where advert_id="7" and room_type_id="54" and (date >= "2013-09-20" AND date <"2013-09-21")
having sum(price) is not null
order by sum(price)