2011-09-30 54 views
2

這是我的代碼和解釋我想要做的一個例子。Codeigniter選擇多個ID的數據

在代碼的開頭,我在我的數據庫中選擇了三個變量。然後,我將它們與確定距離的函數進行比較,如果距離在給定距離內,那麼我有該記錄的ID。這將導致多個ID。可能是五個或沒有,取決於給出的變量。

我需要知道的是,一旦我確定了我需要使用的id,我需要將其放入變量或其他可管理的內容中。基本上我需要重新列表並查詢數據庫以獲取數據庫中的詳細信息列表。該列表將返回稍後將過去的對象,以便處理json_encode

我需要知道的是將每個id放入一個變量並將其傳遞給數據庫查詢並獲得所需結果的最佳方法是什麼。

我試過使用$dbStations->where('_id', '34,33,45')但它只返回第一個值。如果可能,我需要類似WHERE _id = 34 AND 33 AND 45

我在爲我的框架使用Codeigniter,並且我已經閱讀了文檔,並且沒有找到解決方案。

編輯:現在我有從數據庫中選擇的數據我需要得到的距離顯示在每個記錄檢索結束。

Example of json: {"details":[{"country":"United States","_id":"3892","lat":"39.954559","lng":"-82.837608","admin_level_1":"Ohio","locale":"Columbus"}]} 

這是它需要的,請記住,距離不在數據庫中,它是在飛行中計算的。

Example of json: {"details":[{"country":"United States","_id":"3892","lat":"39.954559","lng":"-82.837608","admin_level_1":"Ohio","locale":"Columbus", "distance": "1.2 Mi"}]} 

任何關於如何獲得距離的距離被追加到每個結果的末尾?

 $dbStations->select('lat'); 
     $dbStations->select('lng'); 
     $dbStations->select('_id'); 
     $stations = $dbStations->get('stDetails'); 
     foreach ($stations->result() as $station) { 
      $lat2 = $station->lat; 
      $lng2 = $station->lng; 
      $stId = $station->_id; 
      $distance = $this->distance->gpsdistance($lat1, $lng1, $lat2, $lng2, "M"); 
       if ($distance <= $rad) { 
       //at this point the code has determined that this id is within 
       //the preferred distance. 
       $stationArr[] = $stId; 
      } 
     } 
      $dbStations->select('country, _id, lat, lng, admin_level_1, locale'); 
      $dbStations->where_in('_id', $stationArr); 
      $stations = $dbStations->get('stationDetails'); 
     echo json_encode(array('stations' => $stations->result())); 
    } 

回答

12

嘗試使用where_in()

$ids = array(33, 34, 45); 
$dbStations->where_in('id', $ids); 
// Produces: WHERE id IN (33, 34, 45) 

這將返回有33個,34號,45

+0

偉大的工作,我一直想把這個較早,但只是沒有工作了記錄。非常感謝。 –