2015-12-29 130 views
0

我有餐廳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' '以條款'」

+0

我寧願分開查詢和表示邏輯。它將降低代碼的複雜性並使維護更容易。爲此,只需在php中使用'if conditions',而不是在SQL查詢中。 –

+0

嘗試按字段排序(temp.res_oct_status,'Open')DESC –

+0

同樣的錯誤來臨... – mikejohnvino

回答

0

試試這個(第一個是你的查詢我修改,第二個是我以前的答案):

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 ) AS temp ORDER BY FIELD(temp.res_oct_status, 'Open') DESC , FIELD(temp.restaurant_zip, '2600') DESC, RAND() LIMIT 0,10 

SELECT temp.*, (CASE WHEN temp.res_curr_ocday_status = 'Open' THEN 'Open' 
      WHEN temp.res_oct_status = 'Open' THEN 'Open' 
      ELSE 'Closed' END) AS final_res_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_oct_status, 
    FROM restaurantAS rest 
    LEFT JOIN restaurant_time AS restime ON rest.restaurant_id = restime.res_id 
LEFT JOIN city AS cty ON rest.restaurant_city = cty.city_id AND rest.restaurant_status = '1') as temp ORDER BY FIELD(final_res_status , 'Open') DESC 
+0

其工作..謝謝..我需要添加一個表與左連接和需要使用WHERE條件也..LEFT JOIN城市AS cty ON rest.restaurant_city = cty.city_id,其中condition是WHERE rest.restaurant_status ='1 ORDER BY FIELD(final_res_status,'Open')DESC。如何使用? – mikejohnvino

+0

@mikejohnvino請檢查我已完成的chagnes –

+0

請添加WHERE條件..... WHERE rest.restaurant_status ='1'ORDER BY FIELD(final_res_status,'Open')DESC – mikejohnvino

-1

使用下面的SQL查詢:

SELECT temp.*, (CASE WHEN temp.res_curr_ocday_status = 'Open' AND temp.res_oct_status = 'Open' THEN 'Open' 
     ELSE 'Closed' END) AS final_res_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_oct_status, 
FROM restaurantAS rest 
LEFT JOIN restaurant_time AS restime ON rest.restaurant_id = restime.res_id) as temp 
+0

你不覺得你已經發布了相同的答案,因爲我已經給出了! –

+0

它的工作..謝謝..我需要添加一個表與左連接和需要使用WHERE條件也..LEFT JOIN城市作爲cty ON rest.restaurant_city = cty.city_id和條件是WHERE rest.restaurant_status =' 1'按字段排序(final_res_status,'打開')DESC。如何使用? – mikejohnvino