0

zend で結合を使用したい。以下は私のクエリです

 $select = $this->_db->select()
 ->from(array('evaluationcriteria' => 'procurement_tbltenderevaluationcriteria'),
 array('ScoringCriteriaID','ScoringCriteriaWeight'))
 ->join(array('scoringcriteria' => 'procurement_tbltenderscoringcriteria'),
                               'scoringcriteria.    TenderId=evaluationcriteria.TenderId')
 ->join(array('tenderapplications' => 'procurement_tbltenderapplications','tendersupplier' => 'tblsupplier'),
                               'tenderapplications. TenderInvitationContractorID=tendersupplier.UserID');

Tendersupplier テーブルに UserID があります。しかし、次のエラーが発生します:-

列が見つかりません: 1054 不明な列 'tendersupplier.UserID' in 'on 句

4

3 に答える 3

0

2 つのテーブルを 1 つに結合しようとしているようです -> 結合、それはできないと思います。

Zend_Db_Select() からコードを結合

/**
     * Adds a JOIN table and columns to the query.
     *
     * The $name and $cols parameters follow the same logic
     * as described in the from() method.
     *
     * @param  array|string|Zend_Db_Expr $name The table name.
     * @param  string $cond Join on this condition.
     * @param  array|string $cols The columns to select from the joined table.
     * @param  string $schema The database name to specify, if any.
     * @return Zend_Db_Select This Zend_Db_Select object.
     */
    public function join($name, $cond, $cols = self::SQL_WILDCARD, $schema = null)
    {
        return $this->joinInner($name, $cond, $cols, $schema);
    }

from() のコメント ブロックは次のとおりです。

/**
     * Adds a FROM table and optional columns to the query.
     *
     * The first parameter $name can be a simple string, in which case the
     * correlation name is generated automatically.  If you want to specify
     * the correlation name, the first parameter must be an associative
     * array in which the key is the correlation name, and the value is
     * the physical table name.  For example, array('alias' => 'table').
     * The correlation name is prepended to all columns fetched for this
     * table.
     *
     * The second parameter can be a single string or Zend_Db_Expr object,
     * or else an array of strings or Zend_Db_Expr objects.
     *
     * The first parameter can be null or an empty string, in which case
     * no correlation name is generated or prepended to the columns named
     * in the second parameter.
     *
     * @param  array|string|Zend_Db_Expr $name The table name or an associative array
     *                                         relating correlation name to table name.
     * @param  array|string|Zend_Db_Expr $cols The columns to select from this table.
     * @param  string $schema The schema name to specify, if any.
     * @return Zend_Db_Select This Zend_Db_Select object.
     */

代わりに、次のようなことを試してみてください。

 $select = $this->_db->select()
 //FROM table procurement_tbltenderevaluationcriteria AS evaluationcriteria, SELECT FROM
 //COLUMNS ScoringCriteriaID and ScoringCriteriaWeight
 ->from(array('evaluationcriteria' => 'procurement_tbltenderevaluationcriteria'),
 array('ScoringCriteriaID','ScoringCriteriaWeight'))
 //JOIN TABLE procurement_tbltenderscoringcriteria AS scoringcriteria WHERE 
 //TenderId FROM TABLE scoringcriteria == TenderId FROM TABLE evaluationcriteria
 ->join(array('scoringcriteria' => 'procurement_tbltenderscoringcriteria'),
                 'scoringcriteria.TenderId=evaluationcriteria.TenderId')
 //JOIN TABLE procurement_tbltenderapplications AS tenderapplications
 ->join(array('tenderapplications' => 'procurement_tbltenderapplications'))
 //JOIN TABLE tblsupplier AS tendersupplier WHERE TenderInvitationContractorID FROM TABLE 
 // tenderapplications == UserID FROM TABLE tendersupplier
 ->join(array('tendersupplier' => 'tblsupplier'),
   'tenderapplications.TenderInvitationContractorID=tendersupplier.UserID');

join を許可するには、select() 定義を変更する必要がある場合もあります

//this will lock the tables to prevent data corruption
$this->_db->select(Zend_Db_Table::SELECT_WITHOUT_FROM_PART)->setIntegrityCheck(FALSE);

私はあなたの意図を正しく読んでいることを願っています. (1 つのヒントとして、短いエイリアスを使用してください...)

于 2012-05-24T13:01:53.750 に答える
0

where条件はあなたがしたように書かれていません。

tblsupplier がテーブルであるとは思わないので、配列にする必要があります

このコードはテストされていません!

   $select = $this->_db->select()
   ->from(array('evaluationcriteria' => 'procurement_tbltenderevaluationcriteria'),
    array('ScoringCriteriaID','ScoringCriteriaWeight'))
   ->join(array('scoringcriteria' => 'procurement_tbltenderscoringcriteria'),
                           'scoringcriteria.    TenderId=evaluationcriteria.TenderId')
    ->join(array('tenderapplications' =>  'procurement_tbltenderapplications'), array('tendersupplier' => 'tblsupplier'))
    ->where('tenderapplications. TenderInvitationContractorID=tendersupplier.UserID');
于 2012-05-24T08:43:26.377 に答える
0

結合の同じ配列に複数の物語を含めるのは正しい方法ではないと思います。このようなコードを試してください..

->from(array('evaluationcriteria' => 'procurement_tbltenderevaluationcriteria'),
       array('ScoringCriteriaID','ScoringCriteriaWeight'))
->join(array('scoringcriteria' => 'procurement_tbltenderscoringcriteria'),
      'scoringcriteria.    TenderId=evaluationcriteria.TenderId')
      'scoringcriteria.    TenderId=evaluationcriteria.TenderId')
->join(array('tenderapplications' => 'procurement_tbltenderapplications'),
      'tenderapplications.TenderInvitationContractorID=tblsupplier.UserID');

tblsupplier テーブルの値も結合する予定があるかどうかはわかりません。

于 2012-05-24T08:52:23.480 に答える