2016-11-04 9 views
3

私は9900のオフセット後に限界100のために99レコードしか得ていません。私は20000レコードを持っているにもかかわらず、左側のテーブルには両方ともテーブルがあります。クエリまたはループで何が問題なのですかMySqlの制限とオフセットが間違った結果をもたらします

でも、私はの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

あなたのデータベースにあるレコードの数は少し意味がありません。より関連するのは、結合されている2つの表のレコード数と、左結合が結果セット内のレコードの可能な数を増やす方法です。また、DISTINCTを使用すると、レコード数に影響を与えることがあります。 –

+0

@TimBiegeleisen左結合の両方のテーブルに2,00,000レコード – vijaykumar

答えて

1

これが正しい答えではないかもしれませんそれがなぜ99レコードを与えていたのかを明らかにする。しかし、私、私は、そのクエリで遊ぶとき私が見つけたこれらのソリューションは

問題:

  1. クエリの一つの主な問題は、私が順を持っていないです。クエリで100件の結果を与えることによって順序を使用して

    MySQLのMyISAMテーブルは、 リミット上で実行順序をオフセット

    ソリューション結果の保証を行いませんループ全体でテストされていません

    異なる(table1.id)を選択し、table2.name、TABLE1からtable2.uuid iが表2を使用して不思議な場合、table1.id限界9900によってtable1.id = table2.id順に表2に参加する100

  2. を残し。*いくつかのフィールドの代わりに、同じ順序で並べ替えられたレコードは100レコードです。

    select distinct(table1.id)、table2。* from table1 left join table2 on table1.id = table2.id by table1.id限度9900、100

この問題のために、左の結合表のNULL値が誤った結果をもたらす可能性があります。

関連する問題