Zend framework 在使用Zend_Db的sql查询中的何处
Zend框架初学者。我正在尝试获取视频游戏数据库中的所有Xbox标题。一张桌子里有游戏。另一个表包含游戏类型(即Xbox、Xbox Live Arcade等)。我通常使用以下查询来获取Xbox标题 如何使用Zend_Db执行相同的查询? 谢谢Zend framework 在使用Zend_Db的sql查询中的何处,zend-framework,zend-db,Zend Framework,Zend Db,Zend框架初学者。我正在尝试获取视频游戏数据库中的所有Xbox标题。一张桌子里有游戏。另一个表包含游戏类型(即Xbox、Xbox Live Arcade等)。我通常使用以下查询来获取Xbox标题 如何使用Zend_Db执行相同的查询? 谢谢 SELECT titleGame FROM Game WHERE idGameType IN ( SELECT idGameType FROM GameType WHERE nameGameType = 'Xbox') 这可
SELECT titleGame
FROM Game
WHERE idGameType IN (
SELECT idGameType
FROM GameType
WHERE nameGameType = 'Xbox')
这可以在Zend框架中以几种方式重写。下面是我通常使用的编写选择的方法 您还可以通过
Zend_Db_语句
创建PHP扩展
$sql = 'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?';
$stmt = new Zend_Db_Statement_Mysqli($db, $sql);
$stmt->execute(array('goofy', 'FIXED'));
第一种方法是面向对象的fluent接口,这是您将看到的最多的方法,也是我建议您开始使用的方法
有关详细信息,请通读,尤其是
Zend\u Db\u表选择
,Zend\u Db\u表
,以及Zend\u Db\u适配器
。即使快速通读数据库,特别注意数据库部分也是有帮助的。它将展示如何将表类设置为应用程序和数据库之间的网关。可以通过几种方式在Zend Framework中重写。下面是我通常使用的编写选择的方法
SELECT titleGame FROM Game
LEFT JOIN GameType ON GameType.idGameType = Game.idGameType
WHERE GameType.nameGameType = 'Xbox'
您还可以通过Zend_Db_语句
创建PHP扩展
$sql = 'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?';
$stmt = new Zend_Db_Statement_Mysqli($db, $sql);
$stmt->execute(array('goofy', 'FIXED'));
第一种方法是面向对象的fluent接口,这是您将看到的最多的方法,也是我建议您开始使用的方法
有关详细信息,请通读,尤其是Zend\u Db\u表选择
,Zend\u Db\u表
,以及Zend\u Db\u适配器
。即使快速通读数据库,特别注意数据库部分也是有帮助的。它将展示如何将表类设置为应用程序和数据库之间的网关
SELECT titleGame FROM Game
LEFT JOIN GameType ON GameType.idGameType = Game.idGameType
WHERE GameType.nameGameType = 'Xbox'
为什么不使用联接呢?根据我的经验,中的子选择在MySQL中非常慢
$select = $db->select();
$select->from('Game', array('titleGame'));
$select->joinLeft('GameType', 'GameType.idGameType = Game.idGameType', array());
$select->where("GameType.nameGameType = 'Xbox'");
为什么不使用联接呢?根据我的经验,
中的子选择在MySQL中非常慢
$select = $db->select();
$select->from('Game', array('titleGame'));
$select->joinLeft('GameType', 'GameType.idGameType = Game.idGameType', array());
$select->where("GameType.nameGameType = 'Xbox'");
我尝试了一下,但没有成功(请参阅控制器的init函数)。我得到一个应用程序错误。例外情况是“选择查询无法与其他表联接”。如果我对嵌入式select返回的结果进行硬编码,那也没问题(请参阅)。因为您正在对子查询使用Games
DbTable,该子查询正在查询GameType
,请尝试在该查询的select()
部分之后添加setIntegrityCheck(false)
。或者你可以使用应用程序\u Model\u DbTable\u游戏类型
进行子选择,然后你只需要按照现在的方式在第二次查询中使用setIntegrityCheck(false)
。我尝试了一下,但没有成功(请参阅我控制器的init函数)。我得到一个应用程序错误。例外情况是“选择查询无法与其他表联接”。如果我对嵌入式select返回的结果进行硬编码,那也没问题(请参阅)。因为您正在对子查询使用Games
DbTable,该子查询正在查询GameType
,请尝试在该查询的select()
部分之后添加setIntegrityCheck(false)
。或者你可以使用一个<代码> ApdioToMyStudio.dBTabLygGalyype < /Case>为子选择,然后在第二个查询的方式下只需要<代码> StPixTimeChChest[Falue](代码)>代码。我会考虑你的答案。桌面开发者在这里。我用过数据库已经有一段时间了,我会考虑你的答案。桌面开发者在这里。我已经有一段时间没有使用数据库了。