2

当我使用ltreefrom时,我在 PHP 中遇到问题PostgreSQL。我在 SQL 中执行此操作:

SELECT * FROM tabla t
WHERE t.parent_path <@ (
    select array_agg(t1.parent_path)
    from tabla t1
    where t1.id in (1000035, 1000045, 1000055, 1000065)
)

我在 phpmyadmin 中运行查询,它工作正常,但是当我复制和粘贴时,在 PHP 中它不起作用。我做了一些研究,发现在 PHP 中我需要"<@" and "@>" for "OPERATOR(public.<)" and "OPERATOR(public.>)"分别替换。

我在 php 中使用简单的 ltree 查询对其进行测试,例如:

$sql = "SELECT * FROM tabla t
        WHERE t.parent_path OPERATOR(public.<) (
            select t1.parent_path
            from tabla t1
            where t1.id in = 1000035
        )";
$conn = Zend_Registry::get('conexion');
$respdata = $conn->execute($sql);
return $respdata->fetchAll(PDO::FETCH_ASSOC);

它工作正常,但问题是在我想要执行的实际查询中,我在左侧有ltreean 在另一侧 an ltree[],当我使用“OPERATOR(public.<)”时,它给了我这个错误:

未定义函数:7 错误:运算符不存在:public.ltree public.<public.ltree[]

这就是我正在尝试做的...

$sql = "SELECT * FROM tabla t
        WHERE t.parent_path OPERATOR(public.<) (
            select array_agg(t1.parent_path)
            from tabla t1
               WHERE t1.id IN (1000035, 1000045, 1000055, 1000065)
        )";
$conn = Zend_Registry::get('conexion');
$respdata = $conn->execute($sql);
return $respdata->fetchAll(PDO::FETCH_ASSOC);

任何建议.... tks。对不起,如果我的英语不好。

4

1 回答 1

0

好吧,感谢IMSoP,我找到了答案。

更改

OPERATOR(public.<) 

为了

OPERATOR(public.<@)

很多。

于 2018-12-13T15:24:52.297 回答