2015-04-29 1 views
0

Я делаю цикл while в php, и все идет хорошо, но проблема в том, что Я не только хочу получить идентификатор пользователя, но и некоторые другие материалы, которые находится внутри другой таблицы, поэтому, когда я иду вперед и делаю запрос внутри этого цикла while и выбираю все из этой второй таблицы (где идентификатор равен идентификатору результата из первого запроса), он возвращает только 1 результат. .запрос внутри while цикл только показывает 1 результат

Так что это код, который я в настоящее время есть:

public function getFriends($id) 
{ 
global $params; 

$get = $this->db->select("{$this->DB['data']['friends']['tbl']}", "*", 
          array(
           "{$this->DB['data']['friends']['one']}" => $id 
         ) 
         ); 

if($get) 
{ 
    while($key = $get->fetch()) 
    { 
     $query = $this->db->query("SELECT * FROM {$this->DB['data']['users']['tbl']} 
            WHERE {$this->DB['data']['users']['id']} = :id", 
            array(
             "id" => $key->{$this->DB['data']['friends']['two']} 
            ) 
           ); 

     while($row = $query->fetch()) 
     { 
      $params["user_friends"][] = [ 
       "id" => $key->{$this->DB['data']['friends']['two']}, 
       "name" => $row->{$this->DB['data']['users']['username']}, 
       "look" => $row->{$this->DB['data']['users']['figure']} 
      ]; 
     } 
    } 
} 
else 
{ 
    $params["update_error"] = $params["lang_no_friends"]; 
} 
} 

Спасибо заранее! Пожалуйста, помогите мне!

+0

Можете ли вы сделать fetchAll() с тем, что вы используете во внешнем запросе, чтобы увидеть, восстанавливает ли все записи перед фронтом проблему ... иногда внутренний запрос (по тому же соединению) будет отменять предыдущий запрос, если предыдущий запрос является строчным, а не выбранным одновременно. –

+0

Нет, я не могу сделать fetchAll(), любые другие советы? – DC20

+0

Если речь идет о типе запросов, о которых говорил Кевин, это фактор, вы можете перебирать первый набор результатов, сохраняя его значения локально; а затем итерации по локальному массиву. – Uueerdo

ответ

0

В отсутствие ответов я не знаю, какую базу данных вы используете за сценой ... PDO, mysqli_ , или (надеюсь, нет) mysql_. Но, в любом случае, проблема может заключаться в том, что ваш второй запрос останавливает первое из продолжений. Я бы использовал PDO-> fetchAll(), чтобы получить их все ... но вы говорите, что не можете этого сделать ... поэтому, зацикливание первого и загрузка этих результатов в массив - это первое, что я сделал бы, чтобы увидеть, в этом проблема:

public function getFriends($id) 
{ 
    global $params; 

    $get = $this->db->select("{$this->DB['data']['friends']['tbl']}", "*", 
           array(
            "{$this->DB['data']['friends']['one']}" => $id 
          ) 
          ); 

    $firstResults = array(); 
    if($get) { 
     while($key = $get->fetch()) { 
      $firstResults[] = $key; 
     } 
    } 
    else 
    { 
     $params["update_error"] = $params["lang_no_friends"]; 
    } 

    foreach($firstResults AS $key) 
    { 
     $query = $this->db->query("SELECT * FROM {$this->DB['data']['users']['tbl']} 
            WHERE {$this->DB['data']['users']['id']} = :id", 
            array(
             "id" => $key->{$this->DB['data']['friends']['two']} 
            ) 
           ); 

     while($row = $query->fetch()) 
     { 
      $params["user_friends"][] = [ 
       "id" => $key->{$this->DB['data']['friends']['two']}, 
       "name" => $row->{$this->DB['data']['users']['username']}, 
       "look" => $row->{$this->DB['data']['users']['figure']} 
      ]; 
     } 
    } 
} 

Если это не сработает, нам потребуется больше данных ... например что генерируется запрос? Когда вы запускаете его вручную, он возвращает более одного результата? Если вы избавитесь от внутреннего запроса, это исправить? и т. д.

+0

Да, ты мой герой! Это работает!! :) – DC20

0

Первым шагом при диагностике проблем с PHP и Mysql является добавление строк в ваш код, которые сообщают вам, что делает каждая строка (объявляйте каждый раз, когда вводится цикл, когда каждый запрос mysql выполняется, выплевывает строку запроса) так что вы можете сузиться там, где проблема. Часто это заставляет вас чувствовать себя глупо в ретроспективе: «Дух, этот запрос ничего не возвращал, потому что я неправильно отформатировал идентификатор записи» и т. Д.

Фрагмент кода, который вы предоставили выше, не очень полезен для меня. Я - инструмент устранения неполадок (не синтаксический анализатор), поэтому мне нужны диагностические данные (а не прямой код), чтобы помочь вам в этом.

Смежные вопросы