Postgresql选择列=数组的行

Postgresql选择列=数组的行,postgresql,Postgresql,这是我试图做的一个总结: $array[0] = 1; $array[1] = 2; $sql = "SELECT * FROM table WHERE some_id = $array" 显然,有一些语法问题,但这就是我想要做的,我还没有找到任何东西来说明如何做 目前,我的计划是做以下几点: foreach($idList as $is) $where .= 'some_id=' . $id . ' OR'; endforeach $sql = "SELECT * FROM ta

这是我试图做的一个总结:

$array[0] = 1;
$array[1] = 2;

$sql = "SELECT * FROM table WHERE some_id = $array"
显然,有一些语法问题,但这就是我想要做的,我还没有找到任何东西来说明如何做

目前,我的计划是做以下几点:

foreach($idList as $is)
    $where .= 'some_id=' . $id . ' OR';
endforeach

$sql = "SELECT * FROM table WHERE " . $where;
那么,PostgreSQL是否支持使用数组进行搜索,或者我是否必须执行类似于我的解决方案的操作

SELECT  *
FROM    table
WHERE   some_id = ANY(ARRAY[1, 2])
或与ANSI兼容:

SELECT  *
FROM    table
WHERE   some_id IN (1, 2)
首选ANY语法,因为数组作为一个整体可以在绑定变量中传递:

SELECT  *
FROM    table
WHERE   some_id = ANY(?::INT[])
您需要传递数组的字符串表示形式:{1,2}

,以便动态SQL使用:

'在'| |数组到|字符串数组','||

实例 结果: 注意:{1,2} 注意:从my_表中选择*,其中my_列位于1,2中

在我的例子中,我需要处理一个包含数据的列,因此使用In不起作用。 感谢@Quassnoi的例子。 以下是我的解决方案:

SELECT column(s) FROM table WHERE expr|column = ANY(STRING_TO_ARRAY(column,',')::INT[])

我花了将近6个小时才无意中发现这篇文章。

谢谢,这很有效!我最后做的是:。。some_id=ANYARRAY[.introde,,$id_array.]Hello SQL inject带有上述注释。。。将php内插到sql查询中以下内容应该可以更好地工作:从表中选择*some_id=anyunest?::INT[]@WhiteWolfza:为什么您认为它工作得更好?这似乎并没有保留数组输入定义的返回顺序。i、 e.从id在2,1中的用户中选择id,并从id在1,2中的用户中选择id,其返回顺序始终相同:1,2。如何在第一个查询中返回2,1?我认为=in不合适syntax@FlavorScape哦,天哪,修好了!尽管如此,它在测试我发布的一个示例时确实运行得很好,但是如果没有=使用PostgreSQL驱动程序肯定失败,那么它肯定会更好。您还需要检查输入数据:$nums=array;foreach$array as$a if是_numeric$a$nums[]=$a;
DO LANGUAGE PLPGSQL $$

DECLARE
    some_array bigint[];
    sql_statement text;

BEGIN

    SELECT array[1, 2] INTO some_array;
    RAISE NOTICE '%', some_array;

    sql_statement := 'SELECT * FROM my_table WHERE my_column IN(' ||array_to_string(some_array, ',')||')';
    RAISE NOTICE '%', sql_statement;

END;

$$;
SELECT column(s) FROM table WHERE expr|column = ANY(STRING_TO_ARRAY(column,',')::INT[])