Phalcon MySQL 按位查询(左移运算符)
Phalcon MySQL query with Bitwise (Shift-Left Operators)
我有用户模型,我需要 select 一些其他相关模型,但是我的查询不是标准的,所以我认为我不能使用 find() 或 query:: 来获取结果,所以我想使用 "modelmanager" 及其 phql 来完成这项工作,但是结果我得到空集,为什么是
SQL查询是
SELECT title FROM var_religion WHERE (15 & (1 << (id - 1))) ORDER BY id DESC
然而,当在用户模型中使用以下功能时,它似乎没有任何想法? ```
public function partner(){
//$p_religions = VarReligion::find(
// array(
// "conditions" => " (:var: & (1 << (id - 1))) ",
// "bind" => array("var"=> $this->religion),
// "order" => "id DESC"
// )
//);
$phql = "SELECT title FROM var_religion WHERE (15 & (1 << (id - 1))) ORDER BY id DESC";
$p_religions = $this->manager->executeQuery($phql);
var_dump($p_religions);
}
为什么我没有输出??我该如何查询?
注意:
如果这对于 phalcon mysql 模型是不可能的,我宁愿至少需要一个 php equelent 来将这个逻辑转换成一个
SELECT title FROM var_religion WHERE id IN (1,,,,,4);
通过这次尝试管理了一个类似的请求:
$religions = new \Application\Models\Religions();
$sql = 'SELECT id FROM religions WHERE
(15 & (1 << (id - 1))) > 0 ORDER BY id DESC';
$result = new \Phalcon\Mvc\Model\Resultset\Simple(
null,
$religions,
$religions->getReadConnection()->query($sql)
);
print_r($result->toArray());
请注意,由于 PgSQL 类型限制,我必须执行 > 0
。其他尝试是将查询本身缩短为:
SELECT id, (15 & (1 << (id - 1))) as rank FROM religions HAVING rank > 0
Phalcon docs 中的更多内容。
您使用的Phql不支持按位运算符,所以您需要这样修改它。
PS:
在上述查询中使用 SELECT *
时,您可以受益于模型函数,例如:
$result = new \Phalcon\Mvc\Model\Resultset\Simple(null, $keyword, $keyword->getReadConnection()->query($sql));
foreach($result as $r) {
var_dump($r->getId());
}
我有用户模型,我需要 select 一些其他相关模型,但是我的查询不是标准的,所以我认为我不能使用 find() 或 query:: 来获取结果,所以我想使用 "modelmanager" 及其 phql 来完成这项工作,但是结果我得到空集,为什么是
SQL查询是
SELECT title FROM var_religion WHERE (15 & (1 << (id - 1))) ORDER BY id DESC
然而,当在用户模型中使用以下功能时,它似乎没有任何想法? ```
public function partner(){
//$p_religions = VarReligion::find(
// array(
// "conditions" => " (:var: & (1 << (id - 1))) ",
// "bind" => array("var"=> $this->religion),
// "order" => "id DESC"
// )
//);
$phql = "SELECT title FROM var_religion WHERE (15 & (1 << (id - 1))) ORDER BY id DESC";
$p_religions = $this->manager->executeQuery($phql);
var_dump($p_religions);
}
为什么我没有输出??我该如何查询?
注意: 如果这对于 phalcon mysql 模型是不可能的,我宁愿至少需要一个 php equelent 来将这个逻辑转换成一个
SELECT title FROM var_religion WHERE id IN (1,,,,,4);
通过这次尝试管理了一个类似的请求:
$religions = new \Application\Models\Religions();
$sql = 'SELECT id FROM religions WHERE
(15 & (1 << (id - 1))) > 0 ORDER BY id DESC';
$result = new \Phalcon\Mvc\Model\Resultset\Simple(
null,
$religions,
$religions->getReadConnection()->query($sql)
);
print_r($result->toArray());
请注意,由于 PgSQL 类型限制,我必须执行 > 0
。其他尝试是将查询本身缩短为:
SELECT id, (15 & (1 << (id - 1))) as rank FROM religions HAVING rank > 0
Phalcon docs 中的更多内容。
您使用的Phql不支持按位运算符,所以您需要这样修改它。
PS:
在上述查询中使用 SELECT *
时,您可以受益于模型函数,例如:
$result = new \Phalcon\Mvc\Model\Resultset\Simple(null, $keyword, $keyword->getReadConnection()->query($sql));
foreach($result as $r) {
var_dump($r->getId());
}