1

私はこの例のようなMYSQLテーブルを持っています:

[ID]--[Date]--[UserID]--[Username]--[String]

1  12-10-06 02:35:01  25  Jack  string1
2  12-10-06 02:38:01  25  Jack  string2
3  12-10-06 02:40:01  25  Jack  END
4  12-10-06 02:42:01  36  Jill  string1
5  12-10-06 02:45:01  36  Jill  string2
6  12-10-06 02:48:01  36  Jill  END
7  12-10-06 02:50:01  25  Jack  string1
8  12-10-06 02:52:01  25  Jack  string2
9  12-10-06 02:55:01  25  Jack  END

私はこれらをグループ化するためにこのMYSQLクエリを使用しています:

SELECT m1.Date, m1.Username, m1.UserID
FROM Username m1 LEFT JOIN Username m2
 ON (m1.UserID = m2.UserID AND m1.ID < m2.ID)
WHERE m2.ID IS NULL
ORDER BY Date DESC

これは機能しますが、このクエリの問題は、各ユーザーの最後のエントリのみを出力として提供することです。

6  12-10-06 02:48:01  36  Jill
9  12-10-06 02:55:01  25  Jack

次のように、すべてのセッションを出力として取得したいと思います。

12-10-06 02:35:01 - 12-10-06 02:40:01 25 Jack
12-10-06 02:42:01 - 12-10-06 02:48:01 25 Jill
12-10-06 02:50:01 - 12-10-06 02:55:01 25 Jack

PHPとMYSQLでこれをどのように達成できますか?

4

1 に答える 1

1

ええと、データベース全体にセッションを問い合わせたいとは思わないので、必要なチャンクについては、最後をフェッチして、それぞれに対して異なる要求を行うと思います。

このようなことをする

select UserID, Date, Username from Username order by Date desc limit 10 

そして、それらのエントリのそれぞれについて、あなたはすることができます

ユーザーからの最後のセッションがいつ終了したかを取得します。

select max(Date) from Username where UserID = $userId and Date < '$date' and String = 'cikis'

これらの2つの日付の間の最小日付を取得します。

select min(Date) from Username where Date > '$lastSessionEndDate' and Date < '$date'

理由もなくすべてのセッションの完全なレポートを表示するのではなく、データベースを過度に破壊するのではなく、適切なインデックスを作成し、クエリを本当に役立つものに制限するだけです。

于 2012-10-12T16:54:45.277 に答える