-1
class Application_Model_DbTable_Email extends Zend_Db_Table_Abstract
{

protected $_name = 'memberdetail';

    function getUserid($email)
    {   
        $subquery = $this->select()
        ->from('memberdetail', array('memberid'))
        ->where('email = ?', $email);

        $select = $this->select()
        ->from('usertable', array('userid'))
        ->join('memberdetail', 'usertable.userid = memberdetail.memberid')
        ->where('usertable.userid = ?', $subquery);

        $row = $select->query()->fetch();

        if (!$row) {
        echo "User id not found";
        } else {
        return $userid = $row['userid'];
        }


    }

}

こんにちは、私は上記のクエリからユーザーIDを返そうとしています。ただし、この関数を呼び出すたびに常に更新されるため、クエリは実行されていないようです。

PSこの一連のクエリは、別のメンバーから提供されました。

4

3 に答える 3

1

これは考えすぎているようです。提供された情報によると、usertable.userid = memberdetail.memberidであり、この場合、関数は単純です。

/** this function assumes one and only one email will match a memberid
 *  this function can be improved by validating $email as existing in DB
 *  prior to querying DB, should be done at form level but could be accomplished here
 *  with Zend_Validate_Db_RecordExists()
 */
public function getUserIdFromEmail($email) {
$select = $this->select();
$select->where('email = ?',$email);

$row = $this->fetchRow($select);//fetch a single row
if (!is_null($row) {//fetchRow returns null if no row matched
    return $row->memeberid;//return memberid as string/integer = usertable.userid
    } else {
      //handle error
    }
}
于 2012-08-12T09:27:28.747 に答える
0

Zendフレームワークを使用していることを人々に伝えることは有用だったでしょう。

このリンクのステップ1と2で説明されているように、$thisのデータベースへの接続を確立する必要があります。

http://framework.zend.com/manual/en/zend.db.select.html/

于 2012-08-12T07:29:29.790 に答える
0

それが役立つ場合は、これを試すことができます:

function getUserid($email){        

        $select = $this->select()
        ->setIntegrityCheck(false)
        ->from(array('m' => 'memberdetail'), array('b.userid'))
        ->join(array('b' => 'usertable'), 'b.userid = m.memberid')
        ->where('m.email = ?', $email);

        $row = $this->getAdapter()->fetchAll($select);

        if (!$row) {
        throw new Exception("User id not found");
        } else {
        return $row->toArray();
        }
}
于 2012-08-12T08:08:41.567 に答える