使用Bitwise(Shift-Left Operators)进行Phalcon MySQL查询

时间:2015-11-04 09:38:57

标签: php mysql phalcon

我有用户模型,我需要选择其他相关模型,但我的查询不是标准的,所以我不认为我可以使用find()或query ::来获得结果,所以我在想使用" modelmanager"和它的phql做的工作,但我得到空集作为结果为什么是

SQL查询

 SELECT title FROM var_religion WHERE (15 & (1 << (id - 1))) ORDER BY id DESC

然而,当使用以下功能insde用户模型时,它似乎没有任何想法吗? ```

 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);

1 个答案:

答案 0 :(得分:1)

通过此尝试管理了类似的请求:

$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());

请注意,我必须执行> 0 PgSQL类型限制的原因。其他尝试是将查询本身缩短为:

 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());
}