关于一条sql语句的问题

先上码:大致浏览一遍就好,重点请看文字。
$price = M('hotel_price')
->where("room_type = '{$room_type}' and status=1 and start_date <= '{$date}' and site_hotel_price.end_date >= '{$date}'")
->field("(case when '{$week}' in (weekend) then price_weekend else price_weekdays end) as price")
->find();


这是在thinkphp中的一条sql查询,我努力解释一下,望大神挑出重点耐心看看:

首先,我的想法是想找出房型的当日价格,价格分周末价格和非周末价格,周末是自定义的(也就是可以设置任意星期几为周末,在表中的字段为weekend,字段类型为varchar,也就是这条sql中in(weekend)中的weekend),这里通过判断$week(星期几)是周末还是非周末,但是in (weekend)这里出了问题,没有得到想要的结果。

测试发现,好像是sql编译之后in(weekend)变成了in('1,2,3')而不是in(1,2,3)(假设这里weekend为字符串'1,2,3'也就是设置的星期1到星期3为周末)。那么现在如何修改sql才能达到in(1,2,3)的结果,而不是in('1,2,3')呢,还是根本就不能通过mysql做到?只能通过php操作数据了?

诚心求教大神~~~~有什么我没说明白的地方请评论,我尽量第一时间回答。

阅读 2.5k
3 个回答

这只能php整合数据,因为你给的是一个字符串,不是mysql要的数据格式,所以mysql没法弄

weekend的字段需要自己整合,楼上说的很对

// php整合方法,测试通过。

        $price_info = M('hotel_price')
                 ->where("room_type = '{$room_type}' and status=1 and start_date <= '{$date}' and site_hotel_price.end_date >= '{$date}'")
                 ->field("weekend,price_weekend,price_weekdays")
                 ->find();
        $weekend_arr = explode(',', $price_info['weekend']);
        if(in_array($week, $weekend_arr)){
            $price = $price_info['price_weekend'];
        }else{
            $price = $price_info['price_weekdays'];
        }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题