比如 表A 对应了 表B 的多条记录,并且希望关联的时候,取出 表B 中根据某个字段排序后的第一条数据。
起先,尝试用 group by 语句,但是 group by 是对查询结果进行分组。我们这里是连表中的排序,无法使用 group by 语句。
可以使用下面的方法(Yii 写法):
$query->addSelect(["IF(temp.type=1,'备货单','请购单') as order_type_text"]); $query->addSelect(['temp.字段1','temp.字段2']); $sql = "SELECT 字段值1,字段值2,... FROM 表名 GROUP BY 字段3 ORDER BY 字段4 DESC"; $query->join('LEFT JOIN', "($sql) as temp", 'temp.关联字段 = details.关联字段');
这里的 type 如果为1时,order_type_text 值为“备货单”,否则为“请购单”。这样就省去了一层 foreach 修改值的嵌套。
这个方法解决了在连表查询一对多关系中,被连接表需要排序再关联问题。