そのような列を含むテーブルがあります:
id、person_id、pet_id、description
このテーブルに関するいくつかのステートメントがあります。
- idは主キー、自動インクリメントです
- 各ペア(person_id、pet_id)は一意です
- id、person_id、pet_idは整数であり、NULLではありません
- 「穴」が発生する可能性があります(最大pet_idは、そのようなperson_idを持つ列の総数が(最大)であることを示していません)
- テーブルには、各人のpet_idの平均数であるperson_idがはるかに異なる可能性があります。
問題は、現在のperson_idのランダムなN pet_idを高速に選択する方法ですか?
表の例:
1. 1 1 cat
2. 1 2 dog
3. 2 40 horse
4. 2 35 dog
5. 3 46 duck
6. 2 39 duck
7. 1 3 duck
..................
100000 403 12 monkey
例:個人番号2に対して2つのRANDOM行を選択したいと思います。考えられるランダムな選択肢の1つは、行#3です。そして行#6。選択肢は実際には「ランダム」である必要があります(同じ確率で表示される必要があります)。
mysqlクエリSELECTを使用してそれを行う方法は?
PSもちろん、テーブルからランダムな行をいくつか選択することについて読んだことがあります。これは、いくつかのトリッキーなソリューションの基本的な問題です。しかし、私の場合、1つではなく2つの行があります。
私はより速い方法を考えています
select id from tablename where person_id = 2 order by random() limit 2;