我正在使用一个预订系统,该系统具有一组基于住宿时间(即预订的住宿天数)的费率,我需要使用此数据来检索要向客户展示的预订住宿的准确费用。

但是,我的客户的费率分别为“两周+”和“四周+”,表示两周以上,但低于四周,四周以上,以此类推。但是,我要检索的费率如下:

SELECT id, display_name FROM rate_type WHERE nights = ' . $nights;


其中,$nights是用户在前端选择的夜晚数。但是我遇到了一个问题,因为使用此方法并不总是匹配的。数据库条目如下:

| display_name  | nights |
--------------------------
|  Single       |    1   |
|  Two Nights   |    2   |
|  Three Nights |    3   |
etc...
| Two Weeks +   |   14   |
| Four Weeks +  |   28   |
--------------------------


因此,我的问题是,如果用户在15到27晚之间预订任何东西,都将找不到匹配项,因此无法获得任何费用。对于用户预订15到27晚之间的情况,我想使用14晚的价格(与28晚的价格相对),所以我的问题是,我该如何写一个语句来计算用户选择的晚上并在数据库中找到下一个最低的住宿天数以获取相关房价?

最佳答案

您可以像这样简单地做到这一点:

WHERE nights <= <your_user_input> ORDER BY nights DESC LIMIT 1



看到它在sqlfiddle中实时运行

07-28 06:07