Codeigniter выбирает данные с несколькими идентификаторами - PullRequest
2 голосов
/ 30 сентября 2011

Вот пример моего кода и объяснение того, что я пытаюсь сделать.

В начале кода я выбираю три переменные в моей базе данных.Затем я сравниваю их с функцией, которая определяет расстояние. Если расстояние находится в пределах заданного расстояния, то у меня есть идентификатор этой записи.Это приведет к нескольким идентификаторам.Может быть пять или ни одного, зависит от заданных переменных.

Что мне нужно знать, так это то, как только я определил, что идентификатор, который мне нужно использовать, мне нужно поместить либо в переменную, либо во что-то еще, что является управляемым.В основном мне нужно взять список и снова запросить базу данных, чтобы получить список деталей из базы данных.Список вернет объекты, которые позже будут обработаны до json_encode.

Мне нужно знать, как лучше всего поместить каждый идентификатор в переменную, передать его в запрос к базе данных и получить нужные мне результаты.

Я пытался использовать $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()));
    }

1 Ответ

12 голосов
/ 30 сентября 2011

Попробуйте использовать where_in()

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

Это вернет записи, которые имеют ID 33, 34, 45

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...