我有一个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)。但是因为连接对于它们不存在,所以这些条目根本不再被采用。
1条答案
按热度按时间xfyts7mz1#
字符串
LEFT JOIN将确保结果将显示表A中的所有条目,无论它们在表B中是否匹配。如果表B中没有匹配,则意味着结果中没有B.field_that_might_be_matched的值。默认情况下,MySQL将在那里放置NULL。
ISNULL条件会将其从NULL转换为0。ORDER BY 2,按照选择列表中的第二个字段进行排序(请在这里检查,我已经有一段时间没有使用这种语法了)。
遗憾的是,我不支持PHP中的伪MySQL,它看起来很聪明,但实际上并不聪明。所以这个例子是纯SQL的。我认为很容易翻译成你使用的“ORM”。