php 如果没有找到连接,如何连接DB::table和orderBy jointable属性集0

rta7y2nd  于 5个月前  发布在  PHP
关注(0)|答案(1)|浏览(34)

我有一个DB::table查询,我用它进行了一个连接。如果连接不可能,我想将我用我的连接查找的属性的值设置为0。对于我的当前查询,没有连接的条目将被忽略。

$d_list = DB::table('d')->where('active', 1)
    ->join('d_scores', 'd_id', '=', 'd.id')
    ->orderBy(DB::raw('(case when d_scores.totalscore is null then 0 else d_scores.totalscore end)'), 'desc')
    ->orderBy('u_24h', 'desc')
    ->orderBy('d.nf', 'desc')
    ->orderBy('d.id', 'desc')
    ->get(array('d.id', 'd_scores.totalscore'));

foreach($d_list as $key => $d){
    if($d->id == $data['d']->id){
        $d_rank = $key+1;
        break;
    }
}

字符串
我有一个表有1000个条目。在这1000个条目中,只有100个条目在连接表中有一行。我想根据只有100个条目有一行的属性的值对1000个条目的结果进行排序。其他900个条目在连接表中没有一行,需要为它们不存在的特定属性获取值0(d_scores.totalscore)。但是因为连接对于它们不存在,所以这些条目根本不再被采用。

xfyts7mz

xfyts7mz1#

SELECT A.id,IFNULL(B.field_that_might_be_matched,0)
FROM table_a A
LEFT JOIN
     table_b B
ON
     A.id = B.table_a_id
ORDER BY 2

字符串

LEFT JOIN将确保结果将显示表A中的所有条目,无论它们在表B中是否匹配。如果表B中没有匹配,则意味着结果中没有B.field_that_might_be_matched的值。默认情况下,MySQL将在那里放置NULL。
ISNULL条件会将其从NULL转换为0ORDER BY 2,按照选择列表中的第二个字段进行排序(请在这里检查,我已经有一段时间没有使用这种语法了)。

遗憾的是,我不支持PHP中的伪MySQL,它看起来很聪明,但实际上并不聪明。所以这个例子是纯SQL的。我认为很容易翻译成你使用的“ORM”。

相关问题