我是Zend和Postgres的新手。我的Users
表包含FirstName
列和LastName
列。
我想使用单个“全名”字符串查询表格;例如$search = 'John Sm'
。
我正在尝试使用CONCAT_WS
函数连接表中的两个名称,然后将其与搜索字符串进行比较。
我的陈述
$select->where(array('CONCAT_WS(" ", "u"."FirstName", "u"."LastName") LIKE ?' => array("%$search%")));
我尝试了不同的组合,但似乎无法正确连接。
我想要的陈述的一个例子是SELECT * FROM Users WHERE 'firstname lastname' LIKE '%john s%'
答案 0 :(得分:0)
这不能回答你的问题,但是你考虑过这个问题吗?
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您在Zend\Db\Sql\Predicate\Literal()
中使用数组作为参数,则会将其解释为对$select->where
->literal('CONCAT_WS(" ", "u"."FirstName", "u"."LastName") LIKE \'%word%\'')
。在此解决方案中,您无法使用函数和查询的组合部分。
您可以使用Zend\Db\Sql\Predicate\Expression()
,例如:
$select->where
->expression('CONCAT_WS(" ", "u"."FirstName", "u"."LastName") LIKE \'%?%\'', $word)
或使用WHERE
,例如:
$select->where
->equalsTo()
->or
->greatherThan()
->and
->like()
->nest()
->lessThan()
->or
->literal()
->unnest()
...
(如果变量更多,第二个参数可以是数组)
在此解决方案中,您可以使用相同的方法构建sql Zend\Db\Sql\Where
Zend\Db\Sql\Predicate
https://framework.zend.com/manual/2.2/en/modules/zend.db.sql.html#id7
您也可以构建为$where = new Where();
$where->equalsTo();// and more, more, more, with sub-where inclusive
$select->where->predicate($where);
/ #include <iostream>
template<class Derived>
struct Base {
void f() { static_cast<Derived *>(this)->f(); }
void g() { static_cast<Derived *>(this)->g(); }
};
struct Foo : public Base<Foo> {
void f() { std::cout << 42 << std::endl; }
};
int main() {
Foo foo;
foo.f(); // just OK
foo.g(); // this will stack overflow and segfault
}
,例如:
f