我有一个非常具体的问题。即使有伟大的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进行了比较。但是有很多数据所以代码不是很完美而且很慢
答案 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
的更多信息