我有餐厅restaurant_time表。我需要显示餐厅是开放还是关闭。PHP mysql mysql select case with case条件
这是我的查询
$cur_nowtime = strtotime(date("H:i"));
$curDayOct = strtolower(date("D"));
SELECT rest.restaurant_id, rest.restaurant_name,
restime.".$curDayOct."_status AS res_curr_ocday_status,
IF(".$cur_nowtime." BETWEEN ".$curDayOct."_ot AND ".$curDayOct."_ct, 'Open','Closed') AS res_oct_status,
CASE WHEN res_curr_ocday_status = 'Open' THEN 'Open'
WHEN res_oct_status = 'Open' THEN 'Open'
ELSE 'Closed' END AS final_res_status
FROM restaurantAS rest
LEFT JOIN restaurant_time AS restime ON rest.restaurant_id = restime.res_id
我需要在“final_res_status”使用2个alies名“res_curr_ocday_status”和“res_oct_status”
领域的餐厅openclose状态我需要显示输出如下所示。
restaurant_id restaurant_name res_curr_ocday_status res_oct_status final_res_status
1 aaa Open Closed Closed
2 bbbb Open Open Open
3 cccc Closed Closed Closed
4 dddd Closed Open Closed
请参阅我的查询..
SELECT temp.*, (CASE WHEN temp.res_curr_ocday_status = 'Open' AND temp.res_curr_octime_status = 'Open' THEN 'Open'
ELSE 'Closed' END) AS res_oct_status FROM
(SELECT rest.restaurant_id, rest.restaurant_name,
restime.".$curDayOct."_status AS res_curr_ocday_status,
IF(".$cur_nowtime." BETWEEN ".$curDayOct."_ot AND ".$curDayOct."_ct, 'Open','Closed') AS res_curr_octime_status,
cty.cityname, zip.zipcode,
ROUND(((SUM(rvw.rating)/(COUNT(rvw.rating_id)*5))*100) ,1) AS avg_rating
FROM restaurant AS rest
LEFT JOIN restaurant_time AS restime ON rest.restaurant_id = restime.res_id
WHERE rest.restaurant_status = '1' GROUP BY rest.restaurant_id ORDER BY FIELD(res_oct_status, 'Open') DESC , FIELD(rest.restaurant_zip, '2600') DESC, RAND() LIMIT 0,10) AS temp
...我得到 “未知列 'res_oct_status' '以条款'”
我宁愿分开查询和表示逻辑。它将降低代码的复杂性并使维护更容易。为此,只需在php中使用'if conditions',而不是在SQL查询中。 –
尝试按字段排序(temp.res_oct_status,'Open')DESC –
同样的错误来临... – mikejohnvino