【问题标题】:CakePHP : Get Table with many conditionsCakePHP:获取具有多种条件的表
【发布时间】:2018-07-15 00:45:14
【问题描述】:

我有一个非常具体的问题。即使有很棒的 CakePHP 文档,我仍然不知道如何修复我的 pb。

我目前正在使用 CakePHP 框架进行 Web 开发。这是我的情况: 我有一个表“TableA”,其中包含参数“name”、“type”(1 到 6)和“state”(OK 和 NOT OK)。我想要的是获得所有类型为 5 或 6 且名称与“状态”不同的行 OK。

表格中有不同的行具有相同的“名称”。我对没有 OK 状态的同名行很感兴趣。

例如,有: 名称:example1 状态:不正常 名称:example1 状态:不正常 名称:example1 状态:不正常 并且没有状态为 OK 的 example1,这就是我想要得到的这种线。

我想使用 cakePHP 语法,在 TableRegistry::get 函数中使用条件。

感谢您的帮助。等你回来。

PS: 我现在取得的并不是最好的解决方案:

$tablea_NOTOK = TableRegistry::get("TableA")->find('all', array(
            'conditions' => array(
                'OR' => array(
                    array('TableA.type' => 5),
                    array('TableA.type' => 6),
                ),
                'Etudes.state' => 'NOT OK'
            )
        ));
        $this->set(compact('tablea_NOTOK'));

        $tablea_OK = TableRegistry::get("TableA")->find('all', array(
            'conditions' => array(
                'OR' => array(
                    array('TableA.type' => 5),
                    array('TableA.type' => 6),
                ),
                'Etudes.state' => 'OK'
            )
        ));
        $this->set(compact('tablea_OK'));

然后在我看来,我将 tablea_OK 的每一行与 tablea_NOTOK 进行了比较。但是数据量大所以代码不完善,速度慢

【问题讨论】:

    标签: php sql cakephp request conditional-statements


    【解决方案1】:

    您可以考虑在数据库中创建一个视图表,其中包含所需数据的组合。由于数据将全部来自单个表,因此您无需遍历数据并进行比较。

    我不知道你所有的表关系,但我用这些字段和数据做了一个简单的表:

    id名称类型状态

    1 哈利 5 好

    2 哈利 6 不行

    3 哈利 6 不行

    4 约翰 5 不行

    然后我编写了一个查询,该查询将按名称分组并计算状态值:

    SELECT `name`, `type`, `state`,
    (SELECT COUNT(state) FROM TableA as TableA1 WHERE `state` = 'OK' AND TableA.name = TableA1.name) as okay_count,
    (SELECT COUNT(state) FROM TableA as TableA2 WHERE `state` = 'NOT OKAY' AND TableA.name = TableA2.name) as not_okay_count
    FROM TableA
    GROUP BY name;
    

    结果如下所示:

    名称类型状态okay_count not_okay_count

    哈利 5 OK 1 2

    约翰 5 不好 0 1

    您可以根据需要调整查询并创建数据库视图表,然后在 CakePHP 中调用它。

    $my_view_table = TableRegistry::get("MyViewTable")->find('all');
    

    您可以了解更多关于 MySQL 视图表here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      相关资源
      最近更新 更多