私はこれまでに複数のアプローチを試しました。大きなテーブル (数千のレコード) があり、いくつかの異なる国以外の値を持つさまざまな旅行があり、旅行の期間 (日数) があり、指定された量のランダムアイテムをランダムに選択したい与えられた旅行からのランダムな選択を含み、国ごとに最短のいくつかを含みますが、最短の旅行が8日である国もあれば、12日である国もあります...など
| country | duration | price | departure | hotelname | otherData |
| A | 8 | 123 | 2013-06-19 | hotel A | blah blah |
| A | 15 | 234 | 2013-06-20 | hotel A | blah blah |
| A | 15 | 234 | 2013-06-20 | hotel B | blah blah |
| A | 15 | 234 | 2013-06-20 | hotel C | blah blah |
| B | 8 | 345 | 2013-06-21 | hotel D | blah blah |
| C | 12 | 456 | 2013-06-22 | hotel E | blah blah |
...
旅行の選択を含む6つのレコードを持つランダムな配列を構築し、同じ国からのより多くの結果の表示を最小限に抑えようとし(ただし、テーブルに十分な数の国がない場合は許可されます)、最も低い国ごとにいくつかのレコードをランダムに選択する必要がありますその国の期間。
問題は、一部の国では最短の旅行が 8 日間で、他の国では 11 日間なので、簡単に言えません。
where days<9
また、シーズンの終わりには、十分な結果が得られない原因となる旅行がほとんどない可能性があるため、次のことはできません。
group by country
私のアイデアは、国ごとに 6 つのレコードを選択し、その国で使用できる期間が最も短いものorder by duration ASC
をrand()
.