2017-12-18 6 views
1

私は2つのテーブル持っているとしましょう:ユーザーや組織(既存の関係のない要素を含む)に関連するテーブル値を上のソート

users: 
id int, 
name varchar, 
type int, 
deleted bool 

organisations: 
id int, 
name varchar 
deleted bool 

を、私はタイプ1名のユーザーが組織をソートしたいです。

$organisationsModel -> join('users', 'organisations.id', '=', 'users.organisationId', 'left') 
    -> select('organisations.*', 'users.name as userName') 
    -> where('users.type', 1) 
    -> where('users.deleted', 0) 
    -> orderBy('userName', 'ASC); 

それだけでタイプ1(0に削除されたセットを持つ)のユーザーを持つ組織を示しており、私の質問です:私は、私は関係値によってソートしたいときに私が参加使用する必要があることを知っている私がすることができます適切なユーザーが接続されていない状態で値を返すようにこのクエリを変更しますか?あなたは左を必要とする

+0

によって条件付き順序を使用することができ、結果を注文するには、すべての組織を得るために追加の参加条項に参加しますタイプが1であるかどうかのユーザーは、タイプ1のユーザーを最初にソートし、次にソートするユーザーをソートしますか? –

+0

私はいつもユーザー(タイプ1、削除された0)によってソートされたすべての組織を呼びたいと思いますが、組織に適切なユーザーが接続されていないときは、ユーザー名を空の文字列としてエミュレートする必要があります。 – Gieerzetka

答えて

1

はあなたがすべての希望あなたの予想出力は何句

$organisationsModel->leftJoin('users', function ($join) { 
            $join->on('organisations.id', '=', 'users.organisationId') 
             ->where('users.type', 1) 
             ->where('users.deleted', 0); 
        }) 
        ->select('organisations.*', 'users.name as userName') 
        ->orderByRaw('CASE WHEN users.type = 1 AND users.deleted = 0 THEN 1 ELSE 0 END DESC') 
        ->orderBy('userName', 'ASC); 

Another similar problem

+1

ありがとうございました!私は少しあなたのコードを変更しました(最初の参加は不要です)が動作します! – Gieerzetka

関連する問題