MySql限制和偏移给出了错误的结果

时间:2016-11-04 05:27:15

标签: php mysql laravel orm laravel-5.2

在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
}

1 个答案:

答案 0 :(得分:1)

这可能不是正确答案,以解决它为什么给出99条记录。但是,当我使用该查询时,我找到了这些解决方案

<强>问题:

  1. 查询的一个主要问题是我没有订购。
  2.   

    MySQL MyISAM表不保证结果按顺序打开   限制,抵消

    <强>解决方案:

    1. 在查询中使用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

    2. 奇怪的是,如果我使用table2。*代替同一查询中的某些字段,而不是按顺序给出100条记录

      select table(table1.id),table2。* from table1 left join table2 on table1.id = table2.id order by table1.id limit 9900,100

    3. 所以,最后我唯一的问题就是左边连接表中的空值可能会产生错误的结果。