2012-03-07 83 views
1

我目前使用的这个让我的结果字符串与其他几个比较字符串中的最佳实践:Postgres的条件查询 - 为

pg_prepare($tableConnection, "", "SELECT * FROM star_wars_action_figures WHERE cool = 't' AND weapon ILIKE $1 OR weapon ILIKE $2 OR weapon ILIKE $3 OR weapon ILIKE $4 OR weapon ILIKE $5") or die($tableDataRetrieved = false);

$actionFigureTables = pg_fetch_all(pg_execute('', array("%gun%","%".$tagArray[0]."%","%".$tagArray[1]."%","%".$tagArray[2]."%","%".$tagArray[3]."%")));

在英语中我会为这个: 查看star_wars_action_figures,只返回那些是cool,然后只有当武器包含gun和其他任何武器时(lightsaber | fist | knife | knife | wit

必须有一个更有效和可靠的方法来做到这一点吗?

我认为这是一个核心的简单问题,需要先取得这个逻辑,然后才能进展。

干杯!

+0

我不知道是否有可能将[arrays](http://www.postgresql.org/docs/9.1/static/arrays.html)传递给Perl中的Postgres连接。 – krlmlr 2012-03-07 14:30:52

回答

1

的Postgres知道POSIX regular expressions。您的查询可以制定为

...AND weapon ~* $1 

如果您将gun|lightsaber|fist|knife|wit传递给第一个参数。

+0

'SELECT * FROM star_wars_action_figures WHERE cool ='t'AND weapon〜* $ 1'然后传入:“gun | lightsaber | fist | knife | wit”?我可以使用正则表达式很多次! – roberthuttinger 2012-03-07 14:03:43

+0

已编辑。我错过了在你的问题中“t”是一个常数。再加上语法错误。 – krlmlr 2012-03-07 14:04:49

+0

是否区分大小写? – roberthuttinger 2012-03-07 14:09:45