2011-09-30 3 views
2

Voici un exemple de mon code et une explication de ce que j'essaie de faire.Codeigniter sélection de données avec plusieurs ID

Au début du code, je sélectionne trois variables dans ma base de données. Je les compare ensuite à une fonction qui détermine la distance, si la distance est dans la distance donnée, alors j'ai l'ID de cet enregistrement. Cela entraînera plusieurs ID. Pourrait être cinq ou aucun, dépend des variables données. Ce dont j'ai besoin de savoir, c'est qu'une fois que j'ai déterminé que je dois utiliser id, j'ai besoin de mettre dans une variable ou quelque chose d'autre qui est gérable. Fondamentalement, je dois prendre la liste et interroger la base de données à nouveau pour obtenir la liste des détails de la base de données. La liste renverra les objets qui seront passés à json_encode pour traitement. Ce que je dois savoir, c'est quelle est la meilleure façon de mettre chaque identifiant dans une variable et de le passer à une requête de base de données pour obtenir les résultats dont j'ai besoin.

J'ai essayé d'utiliser $dbStations->where('_id', '34,33,45') mais il ne renvoie que la première valeur. J'ai besoin de quelque chose comme WHERE _id = 34 AND 33 AND 45 si possible. J'utilise Codeigniter pour mon framework et j'ai parcouru la documentation et je n'ai pas trouvé de solution.

EDIT: Maintenant que j'ai les données sélectionnées dans la base de données, j'ai besoin d'obtenir la distance à afficher à la fin de chaque enregistrement récupéré.

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

C'est ce qu'il doit être, gardez à l'esprit que la distance n'est pas dans la base de données, elle est calculée à la volée.

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"}]} 

Toutes les idées sur la façon d'obtenir ths distance qui est caculcated être ajouté à la fin de chaque résultat?

 $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())); 
    } 

Répondre

12

Essayez d'utiliser where_in()

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

Ceci renvoie les enregistrements qui ont l'ID de 33, 34, 45

+0

fonctionnait très bien, je tentais plus tôt, mais juste ne fonctionnait pas. Merci beaucoup. –

Questions connexes