PG_Fetch_Objects возвращает только одну строку из рекурсивного запроса

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

Из соображений производительности я заменил функцию на использование рекурсивных запросов WITH в Postgres. Моя проблема:
pg_fetch_object возвращает только одну строку, хотя pg_num_rows возвращает правильное количество строк (104). Сам запрос в порядке, я получаю чистые результаты с другими инструментами запроса.

Я надеюсь, что кто-то может мне помочь, мне нужно использовать pg_fetch_object для сбора ВСЕХ строк результата запроса, а не только первой строки.
Пожалуйста, я понятия не имею, что я сделал неправильно. Это код:

public function getSelfAndAncestorsRecursive($id) {
$animal = array();
if ($id != "") {

//Here comes the query string
$query = "WITH RECURSIVE Ancestors AS
(SELECT
animals.id, animals.name, animals.\"animalID\",
animals.sex, animals.\"birthDate\", animals.alive, animals.deleted, cages.\"cageName\",
animals.dummy_strain_info AS strain, animals.dummy_line_info AS line, animals.dummy_gen_info AS gene,
animals.generation, animals.dummy_backcross_info,
animals.\"parentMale\" AS sire, animals.\"parentFemale\" AS dam
FROM animals
LEFT OUTER JOIN cages ON \"homeCage\" = cages.id
WHERE animals.id = ".$id
."UNION ALL
SELECT a.id, a.name, a.\"animalID\",
a.sex, a.\"birthDate\", a.alive, a.deleted, c.\"cageName\",
a.dummy_strain_info AS Astrain, a.dummy_line_info AS Aline, a.dummy_gen_info AS Agene,
a.generation, a.dummy_backcross_info,
a.\"parentMale\" AS Asire, a.\"parentFemale\" AS Adam
FROM animals a
LEFT OUTER JOIN cages c ON a.\"homeCage\" = c.id
INNER JOIN Ancestors n ON a.id = n.sire::int8 OR a.id = n.dam::int8
)
SELECT DISTINCT * FROM Ancestors
ORDER BY id DESC;";


//Parse Query and fetch result
$res = pg_query($query);
while ($row = pg_fetch_object($res) {

//Set array values
$animal["id"] = $row->id;
$animal["name"] = $row->name;
$animal["animal_id"] = $row->animalID;
$animal["birth_date"] = $row->birthDate;
$animal["sex"] = $row->sex;
$animal["alive"] = $row->alive;
$animal["deleted"] = $row->deleted;
$animal["cage"] = $row->cageName;
$animal["strain"] = $row->strain;
$animal["line"] = $row->line;
$animal["gene"] = $row->gene;
$animal["generation"] = $row->generation;
$animal["backcross"] = $row->dummy_backcross_info;
$animal["sire"] = $row->sire;
$animal["dam"] = $row->dam;
}

}
return $animal;
}

0

Решение

Да, спасибо, но это не то, что мне нужно было знать.
При использовании pg_fetch_all я получаю многомерный массив на основе индекса, который я не могу использовать.

Если честно, мне тяжело переносить
Array ([0] => Array ([id] => 12345 …
в
Array ([id] => 380619 …

но я буду продолжать пытаться самостоятельно

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]