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[])