В предложении вернуть только 1 строку - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть список ссылок и заголовков в моей таблице ссылок, и я пытаюсь использовать предложение IN для их возврата, но запрос никогда не возвращает более одной строки и всегда минимальную строку набора.

SELECT title, url 
FROM opsx_links 
WHERE linkid IN('61','60','10','24','15','20','30','47')

Это должно вернуть все 8 ссылок, так как они все существуют, но оно возвращает только информацию для элемента 10. Если я удаляю элемент 10 из списка, тогда он будет возвращать только элемент 15 и т. Д.

Я это теряю или как?

Я погуглил свою задницу и не могу найти никого, кто имел эту проблему.

Спасибо.

-V

хорошо, мой плохой, вот код php

public function getLinks ($data) {
   $query  = $this->db->Fetch ("SELECT title, url 
             FROM {$this->prefix}links WHERE linkid IN(" . $data . ")");
   $result = $this->db->FetchObject ($query);

   foreach ($result as $key => $value):

      $result->$key = $this->replace_strings ($value);

   endforeach;

   $this->db->Free ($query);

   return $result;
}

Попробовал это за Джерон

$res = array();

while ($result = $this->db->FetchObject ($query)):

    $res['title'] = $result->title;
    $res['url']   = $result->url;

endwhile;

Теперь возвращается только первая строка вместо минимальной строки.

Что в мире?

Хорошо, после долгих проб и ошибок и помощи от всех вас, гуру, вот ответ.

public function getLinks ($data) {
     $query  = $this->db->Fetch ("SELECT title, url 
               FROM {$this->prefix}links WHERE linkid IN(" . $data . ")");  
     $res = array ();
     while ($results = $this->db->FetchArray ($query)):
          $obj = new stdClass;
          $obj->title = $results['title'];
          $obj->url = $this->replace_strings($results['url']);
          $res[] = $obj;
     endwhile;

     $this->db->Free ($query);

     return (object)$res;
}

Спасибо за помощь.

1 Ответ

1 голос
/ 03 апреля 2012

Редактировать: Вы получаете только один результат из набора результатов:

$result = $this->db->FetchObject ($query);

Должно быть что-то вроде:

$my_results = array();
while ($result = $this->db->FetchObject ($query))
{
  // make a new / clone the object, add it to the array and do the processing
}
return $my_results;
...