我有这个问题:
SELECT g.title, g.asin, g.platform_id, r.rank
FROM games g
INNER JOIN ranks r ON ( g.id = r.game_id )
ORDER BY r.rank DESC
LIMIT 5`
Run Code Online (Sandbox Code Playgroud)
现在,这是我的JOIN使用,Zend_Db_Select但它给了我数组错误
$query = $this->select();
$query->from(array('g' => 'games'), array());
$query->join(array('r' => 'ranks'), 'g.id = r.game_id', array('g.title', 'g.asin', 'g.platform_id', 'r.rank'));
$query->order('r.rank DESC');
$query->limit($top);
$resultRows = $this->fetchAll($query);
return $resultRows;Run Code Online (Sandbox Code Playgroud)
谁知道我可能做错了什么?我希望显示"游戏"中的所有列以及排名表中的"排名"列.
我正在定期解析json feed并且只需要从feed中插入最新用户并忽略现有用户.
我认为我需要的是ON DUPLICATE KEY UPDATE或INSERT IGNORE基于一些搜索,但我不太确定我问的是什么 - 例如:
users
1 John
2 Bob
Run Code Online (Sandbox Code Playgroud)
部分JSON:
{ userid:1, name:'John' },
{ userid:2, name:'Bob' },
{ userid:3, name:'Jeff' }
Run Code Online (Sandbox Code Playgroud)
从这个饲料我只想插入杰夫.我可以通过所有用户做一个简单的循环,并做一个简单的SELECT查询,看看用户id是否已经在表中,如果不是我做INSERT,但我怀疑它不是一个有效和实用的方法.
顺便说一句,如果有人愿意提供具体的答案,我正在使用Zend_Db进行数据库交互:)我不介意一般的战略解决方案.
目前,我正在定期DbTable Auth Adapter:
protected function _getAuthAdapter($formData)
{
$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName('users')
->setIdentityColumn('username')
->setCredentialColumn('password');
$authAdapter->setIdentity($formData['username']);
$authAdapter->setCredential(md5($formData['password']));
return $authAdapter;
}
Run Code Online (Sandbox Code Playgroud)
但我想检查数据库中的其他列(IsActive例如).我不知道是否可以使用适配器完成此操作.如何才能做到这一点?
我想用OR子句进行Zend db更新.什么是相同的声明:
UPDATE mail
SET message_read = 1
WHERE id = 5
OR id = 10
Run Code Online (Sandbox Code Playgroud) 我想WITH在Zend框架中使用SQL查询中的语法,SQL看起来像这样:
WITH t AS
(SELECT item_id, row_number() OVER (ORDER BY some_criteria DESC) rn
FROM orders)
SELECT t2.rn, t2.item_id
FROM t t1 JOIN t t2 ON (t2.rn > t1.rn)
WHERE t1.item_id = 145;
Run Code Online (Sandbox Code Playgroud)
我怎么能在Zend Framework中这样做?用Zend_Db_Select?有什么建议?
在我的PHP脚本中,我运行一个更新语句,如下所示:
$this->_db->update('names', $data, $this->_db->quoteInto('id = ?', $obj->id));
Run Code Online (Sandbox Code Playgroud)
db句柄是Zend_Db_Adapter_Abstract实例(PDO MySql种类).
问题是更新失败,我似乎无法获得有关错误的更多信息.
该错误发生在try/catch块中.当我发现错误时,我运行:
$db->getProfiler()->getLastQueryProfile();
Run Code Online (Sandbox Code Playgroud)
输出是:
2012-11-14T22:20:02+11:00 INFO (6): Zend_Db_Profiler_Query Object
(
[_query:protected] => begin
[_queryType:protected] => 64
[_startedMicrotime:protected] => 1352892002.6064
[_endedMicrotime:protected] => 1352892002.6066
[_boundParams:protected] => Array
(
)
Run Code Online (Sandbox Code Playgroud)
我知道它说没有参数绑定,但我真的不认为是这种情况.我认为不知怎的'最后一次查询'不是我认为的那样.
其次,当我发现错误时,我也会运行:
$db->getConnection()->errorInfo();
Run Code Online (Sandbox Code Playgroud)
输出是:
2012-11-14T22:20:02+11:00 INFO (6): Array
(
[0] => 00000
[1] =>
[2] =>
)
Run Code Online (Sandbox Code Playgroud)
显然这不是很有帮助.
有任何想法吗?如何获得有关错误的更多信息?
谢谢!
我使用Zend框架2.x并面对问题,因为我已经搜索了很多.我想在查询中使用like子句,但每次都会给出错误:
这是我的努力:
$sql = new Sql($this->adapter);
$select = $sql->select()->columns(
array('user_profile_id', 'profile_login_name'))->from($this->table)->where->like(
'profile_login_name', '%'.$strSearch.'%');
echo $select->getSqlString(); die;
Run Code Online (Sandbox Code Playgroud)
但是这给出了错误:
致命错误:在第131行的 /var/www/YAAB/branches/admin/models/Model/UserTable.php中调用未定义的方法Zend\Db\Sql\Where :: getSqlString()
我也使用了Zend\Db\Sql\Predicate但这也给出了错误.
所以我的问题是
请尽快回复,因为它很紧急.
我正在使用BjyAuthorize和Zend Framework2来实现授权,并且能够成功地集成来自数据库的角色.现在我想从数据库表中获取规则和保护.我怎样才能做到这一点?
我正在实现我的模型,就像快速入门指南一样.
在我的模型中,我试图实现一个findByToken()方法.当前find()方法接受一个$id参数,但我想通过不同列的值来查找.
//excerpt from the quickstart guide
public function find($id, Default_Model_Guestbook $guestbook)
{
$result = $this->getDbTable()->find($id);
if (0 == count($result)) {
return;
}
$row = $result->current();
$guestbook->setId($row->id)
->setEmail($row->email)
->setComment($row->comment)
->setCreated($row->created);
}
Run Code Online (Sandbox Code Playgroud)
我尝试过这样的事情,但我觉得它不起作用:
$db = $this->getDbTable();
$where = $db->getAdapter()->quoteInto('token = ?', $token);
$result = $db->find($where);
Run Code Online (Sandbox Code Playgroud)
通过指定列的值查找行的正确方法是什么?
我想在zf2中使用where子句将两个表联合起来: -
table1 app_followers
table2 app_users
where condition可以是任何东西
,并按updated_date排序.
请让我知道zend 2的查询.
谢谢..
mysql zend-framework zend-db zend-framework2 zend-framework3