CakePHP:获取包含许多条件的表

时间:2018-02-05 07:45:38

标签: php sql cakephp request conditional-statements

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

我目前正在使用CakePHP框架进行Web开发。这是我的情况: 我有一张表" TableA"其中包含参数" name"," type"(1到6)和" state"(OK和NOT OK)。我想要的是得到所有类型为5或者6的Table行,并且与#34; state"没有相同的名称行。好。

表格的不同行有相同的名称"。我对那些没有OK状态的同名行感兴趣。

例如,有: name:example1 state:NOT OK name:example1 state:NOT OK name:example1 state:NOT OK 并且没有example1状态OK,这就是我想要获得的这种行。

我想使用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进行了比较。但是有很多数据所以代码不是很完美而且很慢

1 个答案:

答案 0 :(得分:0)

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

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

id name type state

1 Harry 5 OK

2 Harry 6 Not OKAY

3 Harry 6 Not OKAY

4 John 5 Not OKAY

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

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

Harry 5 OK 1 2

John 5 NOT OKAY 0 1

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

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

您可以了解有关MySQL查看表here

的更多信息