MySQL запрос на выбор с php foreach - PullRequest
       6

MySQL запрос на выбор с php foreach

1 голос
/ 14 сентября 2011

Я пытаюсь написать функцию, в которой я получу идентификаторы из таблицы, а затем хочу получить все идентификаторы в массиве, чтобы эти идентификаторы использовались в другой функции для обработки.Я написал ниже, но это не метод массива, а также он печатает идентификаторы дважды.Я искал в Интернете, и все они предлагают использовать mysql_fetch_assoc и удалять для каждого ... но в моем случае я использую адаптер Zend fetchAll, чтобы получить вывод.Пожалуйста, дайте мне знать, как я могу получить идентификаторы в массиве, а также только один раз, чтобы я мог передать этот массив, и каждый идентификатор обрабатывается один за другим ... прямо сейчас то, что у меня есть, просто останавливается после обработки первого.Спасибо.

function getID()
  {
    $sql = 'SELECT user_id FROM users WHERE ready = "1" ';
    $idList = $this->getAdapter()->fetchAll($sql);
    if(!empty($idList)) {
        foreach($idList as $value) {
            echo $value['user_id']."\n";
        }
    }
   }


Output 
201
223
231
334
201
223
231
334

Ответы [ 5 ]

2 голосов
/ 14 сентября 2011

Попробуйте это.

function getIDs() {
  $result = array();
  $sql = 'SELECT user_id FROM users WHERE ready = "1" ';
  $idList = $this->getAdapter()->fetchAll($sql);
  if(!empty($idList)) {
    foreach($idList as $value) {
      echo $value['user_id']."\n";
      array_push(result, $value['user_id']);
    }
  }
  // $result = array_unique($result);
  return $result;
}

Затем вы получите массив по:

$bunch_of_ids = getIDs();

Вы должны выяснить, почему они дублируются, но если вы не можете, вы можете сделать содержимое массива уникальным с помощью:

$result = array_unique($result);

Поместите это прямо перед return $result; внутри функции. Я прокомментировал это в функции выше, потому что было бы намного лучше выяснить, почему это дублируется в первую очередь. Как я отметил в комментарии к вашему вопросу, убедитесь, что функция не вызывается дважды. Также проверьте базу данных на наличие дублирующихся записей (хотя это не должно быть возможно, если 'user_id' является первичным ключом).

(Обратите также внимание, что я переименовал функцию в getIDs (), потому что нет смысла иметь функцию getID (), возвращающую несколько значений. :))

0 голосов
/ 14 сентября 2011

Я думаю, что код в порядке. Я не вижу там никакой ошибки.

0 голосов
/ 14 сентября 2011

Ваша функция выглядит правильно для меня, вы уверены, что не вызываете ее дважды, чтобы объяснить двойной вывод?

0 голосов
/ 14 сентября 2011
<?php
 function getID(){
 $get = mysql_query("SELECT user_id FROM users WHERE ready = '1'", $yhteys);

  for ($i = 0; $i < mysql_num_rows($get); $i++) {
  $id = mysql_result($get, $i, "user_id");
  $userids[] = $id;
  }
 return $userids;
 }
 ?>
0 голосов
/ 14 сентября 2011

эта функция корректна, но если вам нужен массив:

if(!empty($idList)) {
    foreach($idList as $value) {
        $array[] = $value['user_id'];
    }

и если 'user_id' действительно повторяются:

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