7

次のコードでは:


$selectColumns= array('user_id.user_email', // inner join the data from user_id and user_details
                            'user_details.first_name', 
                            'user_details.last_name');
        $result = $handle->select()->from('user_id', $selectColumns)
                                   ->where('user_id.uid=?', $uid)
                                   ->join('user_details', 'user_id.uid = user_details.uid')
                                   ->query(ZEND_DB::FETCH_OBJ);

Zendは、要求された列だけでなく、テーブル内のすべての列を選択します。

一部だけを選択するにはどうすればよいですか?

4

2 に答える 2

8

問題はjoin()メソッド呼び出しにあります:

->join('user_details', 'user_id.uid = user_details.uid')

オプションの 3 番目の引数は、このテーブルの列です。引数がない場合は、デフォルトで になりuser_details.*ます。

テーブル内の両方のテーブルから修飾された列を追加しましたfrom()が、これはデフォルトの には影響しませんuser_details.*。申し訳ありませんが、Zend_Db_Selectそのすべてを追跡できるほど賢くありません。

join()空の配列を渡すことで、呼び出しで列を追加しないようにすることができます。

->join('user_details', 'user_id.uid = user_details.uid', array())

呼び出しで追加した修飾列from()はまだそこにあるはずです。これを自分で確認するには、SQL を出力します。

print $result . "\n"; // calls __toString() method on Zend_Db_Select object
于 2009-06-23T17:01:28.040 に答える
6

最後に結合に別のパラメーターを追加します-空の配列。これにより、結合から列を選択しないように指示されます。現在のコードでは、結合されたテーブルからすべての列を選択しています。

->join('user_details', 'user_id.uid = user_details.uid', array())
于 2009-06-23T17:01:10.427 に答える