首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP :获取具有多个条件的表

CakePHP :获取具有多个条件的表
EN

Stack Overflow用户
提问于 2018-02-05 15:45:38
回答 1查看 132关注 0票数 0

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

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

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

例如,有: name : example1 state : NOT OK,没有状态为OK的example1,这就是我想要得到的这一行。

我想用cakePHP语法来做这件事,在TableRegistry::get函数中有条件。

谢谢你的帮助。等待你的归来。

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

代码语言:javascript
复制
$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进行了比较。但是有大量的数据,所以代码并不完美,速度也不慢

EN

回答 1

Stack Overflow用户

发布于 2018-02-06 09:55:49

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

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

id名称类型状态

1哈里5 OK

2哈里6不好

3哈里6不好

4约翰5不好

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

代码语言:javascript
复制
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

John 5不好0 1

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

代码语言:javascript
复制
$my_view_table = TableRegistry::get("MyViewTable")->find('all');

您可以了解有关MySQL视图表here的更多信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48617864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档