在9900偏移之后,我只获得了99条限制100的记录。即使我在db中有2,00,000条记录,但左边的连接在两个表中都是不同的。我的查询或循环有什么问题
即使我在 phpmyadmin 中尝试了查询,也会给出相同结果的99条记录。
查询
select distinct(table1.id), table2.name, table2.uuid from table1
left join table2 on table1.id = table2.id limit 9900, 100
Laravel查询:
$this
->database
->table('table1')
->selectRaw('distinct(table1.id), table2.uuid, table2.name')
->leftJoin('table1.id', '=', 'table2.id')
->where('opponent_uID', '>', $uID)
->skip($offset)
->take($limit)
->get();
循环
$limit = 100;
$offset = 0;
while (true) {
$result = $this->query($limit, $offset);
$offset += $limit;
if (empty($result)) {
break;
}
// Logic here
}
答案 0 :(得分:1)
这可能不是正确答案,以解决它为什么给出99条记录。但是,当我使用该查询时,我找到了这些解决方案
<强>问题:强>
MySQL MyISAM表不保证结果按顺序打开 限制,抵消
<强>解决方案:强>
在查询中使用order by给出100个结果但未使用整个循环进行测试
select table(table1.id),table2.name,table2.uuid from table1 left join table2 on table1.id = table2.id order by table1.id limit 9900,100
奇怪的是,如果我使用table2。*代替同一查询中的某些字段,而不是按顺序给出100条记录
select table(table1.id),table2。* from table1 left join table2 on table1.id = table2.id order by table1.id limit 9900,100
所以,最后我唯一的问题就是左边连接表中的空值可能会产生错误的结果。