【问题标题】:How can I use NOT BETWEEN in a query in Phalcon?如何在 Phalcon 的查询中使用 NOT BETWEEN?
【发布时间】:2017-10-05 22:20:46
【问题描述】:

我正在使用 Phalcon 查询语言 (PHQL) 使用 NOT BETWEEN 进行查询,但它不工作,应用程序挂起。 有人可以给我一个想法,我该怎么做。非常感谢。 这是我的查询。

       $sql = "SELECT c.* FROM table as c 
      WHERE not exists c.activated NOT BETWEEN :f1: and :f2: ";
        $parameters['f1'] = '2017-10-01';
        $parameters['f2'] = '2017-10-05';
        $result= $this->modelsManager->executeQuery($sql, 
        $parameters);

每次运行查询都会留下:

警告:session_destroy():试图在第 222 行的 C:\xampp\htdocs\myapp\app\plugins\SecurityPlugin.php 中销毁未初始化的会话

【问题讨论】:

    标签: phalcon


    【解决方案1】:

    在我打开这个问题之前,我从未听说过 Phalcon 查询语言 (PHQL),但您尝试的语法在 SQL 中无效。试试这个:

    $sql = "SELECT c.* FROM table as c WHERE NOT c.activated BETWEEN :f1: and :f2: ";
        $parameters['f1'] = '2017-10-01';
        $parameters['f2'] = '2017-10-05';
        $result= $this->modelsManager->executeQuery($sql, 
        $parameters);
    

    不是your_predicate_here

    您所需要的只是反转谓词返回的真/假值。例如如果日期在日期之间(真),则将其反转为假,因此它相当于“不在之间”。

    SQL Fiddle

    MySQL 5.6 架构设置

    CREATE TABLE Table1
        (`activated` datetime)
    ;
    
    INSERT INTO Table1
        (`activated`)
    VALUES
        ('2016-12-01 00:00:00'),
        ('2017-10-01 00:00:00'),
        ('2017-10-05 00:00:00')
    ;
    

    查询 1

    SELECT c.* 
    FROM table1 as c 
    WHERE NOT c.activated BETWEEN '2017-10-01' AND '2017-10-05'
    

    Results

    |            activated |
    |----------------------|
    | 2016-12-01T00:00:00Z |
    

    【讨论】:

    • 真的很管用,兄弟,谢谢你的好解释。非常感谢。
    • 非常好,我可以提供帮助。你知道如何“接受”答案吗?这向其他读者表明存在解决方案。
    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多