Postgresql - 获取订购某个项目的用户列表

时间:2015-09-01 07:18:44

标签: postgresql

我有一张桌子,里面装满了用户和他们的订单。它看起来像(name text, orders text[])。我希望得到所有订购了我传入的特定商品的用户。我尝试过这样的查询:

SELECT name FROM customers WHERE ? = ANY (orders);

但这不起作用,因为?是我正在搜索的,Postgresql将其解释为一列,因此它不是有效的语法。

我想要在其orders数组中选择所有具有特定字符串(?)的用户。这个的正确语法是什么?

如果不重新安排数据库,有没有办法做到这一点?这是一个快速而肮脏的项目,所以没有必要担心可伸缩性。

1 个答案:

答案 0 :(得分:1)

您需要使用contains运算符:

SELECT name 
FROM customers 
WHERE orders @> array[?]

如果你想把它放到一个函数中,你可以这样做:

create function get_cust(p_order text)
  returns setof customers
as
$body$
  select * 
  from customers
  where orders @> array[p_order];
$body$
language sql;

SQLFiddle示例:http://sqlfiddle.com/#!15/23c9e0/1

但这实际上是一个糟糕的数据库设计。你应该花时间并正确地规范你的模型。正确地做到这一点甚至对于快速和肮脏的#34;数据库。大多数大型数据库都是以快速和肮脏的方式开始的。然后他们成长,成长。

一个聪明的人(不记得是谁)曾经说过:&#34; 如果值得做的话,也值得做好&#34; < / p>