2012-10-08 31 views
0

我正在編寫一個代碼來顯示商店的最近位置與他們的打開狀態(例如,如果商店是按月開放或關閉)。我正在使用下面的代碼,它對距離工作正常,但我想對我的列表進行排序以顯示打開狀態的數據,然後使用它們的距離對列表進行排序。如果條件代碼到查詢 我有2列'start_date'與值'int'爲月和'end_date' ...您是否可以請幫助只是把我的PHP下面如果條件代碼到查詢中我使用以下php代碼以顯示在html中的狀態以及。能否請你幫我提高我的查詢被他們打開狀態的結果,先進行排序,然後通過它們之間的距離排序呢如果MYSQL中的條件用於排序距離和檢查狀態

$currMonth = date('m'); 

$query="SELECT *, 
      6371 * 2 * ASIN(SQRT(POWER(SIN(($lat - latitude) * pi()/180/2), 2) +  COS($lat * pi()/180) * COS(latitude * pi()/180) * 
      POWER(SIN(($long - longitude) * pi()/180/2), 2))) as 
      distance, $currMonth >= start_date as open FROM table_name 
      GROUP BY Id HAVING distance <= $km ORDER by distance ASC ,open ASC"; 


if (($currMonth >= $row['start_date']) && ($currMonth <= $row['end_date'])) 
$Status = "open"; 
else 
$Status = "close"; 
+0

什麼數據類型'start_date'? –

+1

你有沒有試過把訂單條款放在其他方面? '訂單通過開放的ASC,距離ASC'而不是'按距離ASC,開放的ASC'訂購 – Kaii

+0

@Kaii只是寫同樣的東西 – xception

回答

1

這種替換此行查詢

$currMonth >= start_date as open FROM table_name 

的:

IF($currMonth >= start_date AND $currMonth <= end_date, 'open', 'closed') as open FROM table_name 

它使用嵌入式IF條件這樣的 - IF(condition, true_result, false_result)

如果條件成立,則結果爲true_result。如果條件爲假,則結果爲false_result

你還需要,如果你想打開的狀態首先要爲了改變你的ORDER條款的順序,其次是距離:

... ORDER BY open ASC, distance ASC