-1

動作しません:

$sql = new Sql($this->adapter);

$select = $sql->select();
$select->from('リクエスト')
           ->columns(array('*', new Expression("CONCAT(up1.value,' ',up2.value) as display_name")))
            ->join(array('up1'=>'user_profile'), "up1.user_id = request.request_user_id AND up1.key = 'user_first_name'", array('up1.value'), 'left')
           ->join(array('up2'=>'user_profile'), "up2.user_id = request.request_user_id AND up2.key = 'user_last_name'", array('up2.value'), 'left')
;

$select を返します。

どのように権利を作るのですか?

4

2 に答える 2

0

Y トリ トゥ:

$select = $sql->select();
$select->from('request')
           ->columns(array('*', new Expression('CONCAT(up1.value,"#",up2.value) as display_user_name')));

$expressionString = '? = ? AND ? = ?';
$types = array(Expression::TYPE_IDENTIFIER, Expression::TYPE_IDENTIFIER, Expression::TYPE_IDENTIFIER, Expression::TYPE_VALUE);

$parameters1 = array('request.user_id', 'up1.user_id', 'up1.key', 'user_first_name');
$expression1 = new Expression($expressionString, $parameters1, $types);

$parameters2 = array('request.user_id', 'up2.user_id', 'up2.key', 'user_last_name');
$expression2 = new Expression($expressionString, $parameters2, $types);

$select->join(array('up1'=>'user_profile'), $expression1, array('value'), 'left')
           ->join(array('up2'=>'user_profile'), $expression2, array('value'), 'left');

エラーが発生した場合、機能しません

于 2013-07-17T15:04:53.770 に答える
0

両方の結合にフィールドを指定しました:

        ->join(array('up1'=>'user_profile'), "up1.user_id = request.request_user_id AND up1.key = 'user_first_name'", array('up1.value'), 'left')
       ->join(array('up2'=>'user_profile'), "up2.user_id = request.request_user_id AND up2.key = 'user_last_name'", array('up2.value'), 'left')

クエリが実際の sql に変換されると、これらのフィールドは自動的に名前空間が付けられるため、フィールド リストに「up1.up1.value」が表示されます。

結合からフィールド参照を削除すると、機能するはずです。

アップデート。そうです、それだけではありません。「user_first_name」は列名として解釈されるため、文字列値として join の「on」パラメーターに渡すことはできません。したがって、式を渡す必要があります。

    $select = $sql->select();
    $select->from('request')
           ->columns(array('*', new Expression('CONCAT(up1.value,"#",up2.value) as display_name')));

    $expressionString = '? = ? AND ? = ?';
    $types = array(Expression::TYPE_IDENTIFIER, Expression::TYPE_IDENTIFIER, Expression::TYPE_IDENTIFIER, Expression::TYPE_VALUE);

    $parameters = array('request.user_id', 'up1.user_id', 'up1.key', 'first_name');
    $expression1 = new Expression($expressionString, $parameters, $types);

    $parameters = array('request.user_id', 'up2.user_id', 'up2.key', 'last_name');
    $expression2 = new Expression($expressionString, $parameters, $types);

    $select->join(array('up1'=>'user_profile'), $expression1, array('value'), 'left')
           ->join(array('up2'=>'user_profile'), $expression2, array('value'), 'left');
于 2013-07-14T08:34:51.053 に答える