鉴于下面的泛型选择,有没有办法从Zend Framework获取查询返回的记录数?循环中的$ row ++对于我的解决方案是不可接受的,因为我正在使用分页(尽管它不在我的示例中).
我也不想用"Count(*)"添加另一个查询.
$query = "Select * from Users where active = 1";
$stmt = $db->query($query);
$noOfRows = ???;
while ($row = $stmt->fetch())
{
// processing
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Zend框架做一组.这是我的代码:
$table = new TableClass();
$select = $table->select();
$select->from ("table", array("date", "column1" => "sum(column1)"));
$select->group ( array ("date") );
$results = $table->fetchAll ($select);
$result = $results[0];
$date = $result->date;
$column1 = $result->column1;
Run Code Online (Sandbox Code Playgroud)
TableClass扩展了'Zend_Db_Table_Abstract'.
我可以通过查看mysql查询日志来查看查询.查询格式正确 - 在查询中命名了column1,如果我在mysql workbench中运行查询,结果看起来是正确的.
我无法访问'column1'中的数据 - 我总是遇到这个异常:
未捕获的异常'Zend_Db_Table_Row_Exception',消息'Specified column"column1"不在行中'
但是,我可以毫无问题地访问日期列.
我试过了:
通过数组索引访问列:$ result [0]但是你得到一个异常(不能通过索引访问列).
不使用列别名:$ select-> from("table",array("date","sum(column1)")); $ column1 = $ result ["sum(column1)"]; 但是你得到一个例外(没有这样的列"sum(column1)").
抛出Zend_Db_Expr:"column1"=> new Zend_Db_Expr("sum(column1)")但这没有帮助.
我见过的其他一些例子建议使用没有聚合函数的列名,即.而不是"总和(列1)","列1",但似乎并没有给我的答案 - 查询不具有任何聚合函数所以MySQL将不知道该怎么用它做.
任何帮助赞赏.
我有两个带有相关数据的表,我想从一个表中选择另一个表中不存在的所有记录,加上相关表上的一些其他标准,如下所示(123仅用于说明目的):
TABLE A
ID
SOMETHING
TABLE B
TABLE_A_ID
TABLE_C_ID
SOMETHING
Run Code Online (Sandbox Code Playgroud)
我的查询直接针对数据运行,如下所示
SELECT A.SOMETHING
FROM A
WHERE A.ID NOT IN (
SELECT
B.TABLE_A_ID AS ID
FROM B
WHERE TABLE_C_ID = 123
);
Run Code Online (Sandbox Code Playgroud)
我如何在Zend中运行它?
实际上我正在研究一个项目,我正在研究Zend Framework 2如何处理复杂的查询(特别是关于如何连接n:m表以及如何使用GROUP_CONCAT和其他函数).您是否知道执行此查询的最佳做法:
SELECT o. * , x.group_one, x.group_two
FROM table_one AS o
LEFT JOIN (
SELECT r.fk1, GROUP_CONCAT( t.field_one ) AS group_one, GROUP_CONCAT( t.field_two ) AS group_two
FROM table_three AS r
INNER JOIN table_two AS t ON r.fk2 = t.id
GROUP BY r.fk1
) AS x ON o.id = x.fk1
LIMIT 0 , 20;
Run Code Online (Sandbox Code Playgroud)
使用此db模式:
--
-- Database: `table-test-1`
--
-- --------------------------------------------------------
--
-- Structure of table `table_one`
--
CREATE TABLE `table_one` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, …Run Code Online (Sandbox Code Playgroud) 我正在尝试做一些相对简单但却无法解决的问题.
我只想在数据库中添加一个当前值,无论如何要做到相当于:
UPDATE `tablename` SET fieldB = fieldB + 1 WHERE fieldA='X'
Run Code Online (Sandbox Code Playgroud)
使用Zend/db更新功能?
我通常使用Zend_Validate_Db_RecordExists来更新或插入记录.这适用于一个字段进行检查.如果要检查两个字段,该怎么做?
$validator = new Zend_Validate_Db_RecordExists(
array(
'table' => $this->_name,
'field' => 'id_sector,day_of_week'
)
);
if ($validator->isValid($fields_values['id_sector'],$fields_values['day_of_week'])){
//true
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用数组和逗号分隔列表,没有任何作用...欢迎任何帮助.关心安德烈
我正在使用Zend_Db_Table_Abstract的具体实现:
class DB_TestClass extends Zend_Db_Table_Abstract {
protected $_name = "test.TestData";
}
Run Code Online (Sandbox Code Playgroud)
如果我想要选择表中的所有行,我似乎有一个选项:
$t = new DB_TestClass;
$rowset = $t->fetchAll();
Run Code Online (Sandbox Code Playgroud)
这将返回Zend_Db_Table_Rowset的一个实例,该实例具有可循环的可迭代接口,并作为rowClass实例访问每个行条目:
foreach($rowset as $row) {
var_dump($row);
}
Run Code Online (Sandbox Code Playgroud)
但是,行集已经将数据库中的每一行加载到内存中(!)在小表上这没关系,但是在大型表 - 例如数千行 - 它很快耗尽了PHP可用的内存并且脚本死掉了.
我怎样才能使用Zend_Db迭代结果集,一次从语句句柄中检索一行,ala mysql_fetch_assoc()?这将允许有效访问任意数量的行(数千,数百万)而不使用过多的内存.
在此先感谢您的任何建议.
我如何指定Zend Db Table Select获取虚拟列.
我想生成这样的SQL
SELECT 'ABC' AS xyz , name FROM employee
编辑:
我试过这个
$select->from('employee',array(
'xyz'=>'ABC',
'name'
));
Run Code Online (Sandbox Code Playgroud)
还有
$select->from('employee',"'ABC' AS xyz , name"));
在两种情况下,Zend都会智能地将"ABC"视为模式中的一个字段.所以它产生类似的东西
SELECT `employee`.`'ABC'` AS `xyz` , `name` FROM `employee`
Run Code Online (Sandbox Code Playgroud)
这会产生错误,因为ABC不是员工的一个领域
我刚开始学习Zend Framework 2作为Zend Framework 1的长期开发人员.围绕新术语缠绕我有点麻烦.
回到ZF1,如果我想创建一个对应用程序是全局的记录器,我会将配置添加到application.ini文件中,引导程序会将其初始化为资源(我希望我说的是正确的).那么从我的任何模块控制器,我可以通过bootstrap资源访问记录器.
输入ZF2,模块是一个有点不同的野兽,它们是自包含的,但我对它们如何与应用程序交互有点困惑.在我看来,这就是ServiceManager发挥作用的地方.我的目标是,让我的模块(不是控制器,而不是模块本身)检查应用程序是否定义了记录器,如果有,则在整个模块中使用该记录器.如果应用程序没有定义记录器,我希望模块为模块范围的日志记录定义记录器.
这个问题也与数据库有关,假设我想让应用程序定义数据库连接的逻辑,而我希望模块定义它所需的表的逻辑.我究竟如何配置它,以及如何在应用程序中定义数据库资源时如何/在何处判断.
注意:我已经浏览了Rob Allen的快速入门(相当充分的信息和我发现的唯一缺乏默默无闻的资源)和ZF2(readthedocs),并且已经用谷歌搜索过了.我发现的是,当涉及到某些拼图的"哪里"时,信息通常是非常模糊的.
发生错误应用程序错误异常信息:
消息:选择查询无法与另一个表连接这是我的代码:
<?php
class Application_Model_DbTable_Seguimientos extends Zend_Db_Table_Abstract {
protected $_name = 'Seguimientos';
public function buscarCaso($cod_beneficiario) {
$consulta = $this->select()
->from(array('seg' => 'Seguimientos'))
->join(array('casos' => 'Asuntos_Estudiantiles'),
'seg.cod_radicado = casos.codigo_radicado')
->where('casos.cod_beneficiario = ?', $cod_beneficiario);
$query = $this->fetchAll($consulta)->toArray();
return $query;
}
}
Run Code Online (Sandbox Code Playgroud)