我有一个非常具体的问题。即使有了伟大的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:我现在实现的并不是最好的解决方案:
$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进行了比较。但是有大量的数据,所以代码并不完美,速度也不慢
发布于 2018-02-06 09:55:49
您可以考虑在数据库中创建一个包含所需数据组合的视图表。由于所有数据都来自单个表,因此您不需要遍历数据并进行比较。
我不知道你所有的表格关系,但我用这些字段和数据做了一个简单的表格:
id名称类型状态
1哈里5 OK
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
John 5不好0 1
您可以根据需要调整查询并创建数据库视图表,然后在CakePHP中调用该表。
$my_view_table = TableRegistry::get("MyViewTable")->find('all');您可以了解有关MySQL视图表here的更多信息
https://stackoverflow.com/questions/48617864
复制相似问题