アプリケーションの統計を作成する必要があるため、可能な限り最高のパフォーマンスを発揮するアルゴリズムが必要です。いくつか質問があります。
私はmysqlデータベースに次のようなデータ構造を持っています:
user_id group_id date
1 5 2012-11-20
1 2 2012-11-01
1 4 2012-11-01
1 3 2012-10-15
1 9 2013-01-18
...
そのため、特定の日付のユーザーのグループを見つける必要があります。たとえば、日付2012-11-15(2012年11月15日)のユーザー1のグループは、最新のグループを返す必要があります。これは、日付2012-11-01(最も近い日付と小さい日付)。
通常、Select where date <=日付の説明で選択された日付の順序などを実行できますが、1000人のユーザーがいる場合、すべての結果を得るには1000のリクエストが必要になるため、それは重要ではありません。
だからここにいくつかの質問があります:
- mysqlリクエストの数が多くなるのを避けるために、すでにphpメソッドを使用して配列をループしていますが、配列のサイズが10000以上になる可能性があるため、それでも適切ではありません。foreach(またはfor?)を使用すると、かなりのコストがかかります。したがって、私の質問は、日付(descまたはasc)で並べ替えられた配列が与えられた場合、与えられた日付よりも小さい(または大きい)日付を含む要素の最も近いインデックスを見つける最も速い方法は何ですか?forまたはforeachループを使用して各要素をループすることに加えて。
- 最初の質問に対する解決策がない場合、この種の問題に対してどのようなデータ構造を提案しますか。
注:日付はmysql形式であり、配列に格納したときにタイムスタンプに変換されません
編集:これはSQLフィドルですhttp://sqlfiddle.com/#!2/dc28d/1 dos_id = 6の場合、t = "2012-11-01"は、日付「2010-12-」で2と5のみを返す必要があります。 10 13:16:58 "