ホームページ > バックエンド開発 > PHPチュートリアル > 1日以内の有効な返信を数える方法

1日以内の有効な返信を数える方法

WBOY
リリース: 2016-06-13 13:50:13
オリジナル
902 人が閲覧しました

1日の有効返信数の数え方
返信テーブルあり

フィールド
著者ID、投稿時間
11 08-01-01 15:00
12 08 -01 -01 16:00
13 08-01-01 17:00
12 08-01-01 18:00
12 08-01-02 16:00



有効な返信をカウントしたいと思います
24 時間以内に同じ人からの返信は有効な返信とみなされます
計算された返信数は
11 (1 回)
12 (2 回)、そのうちの 1 つは 24 時間以内に応答した人は除外されます
13 (1 回)
利用できるより良いアルゴリズムはありますか? まず配列に保存し、常に走査して比較します。配列が面倒です
ありがとう、エビ




-----解決策----------- --------
有効期限は24時間に1回と規定しているのに、他に何をカウントしているのでしょうか? ? ?
時間を使用して減算を行うか (投稿時間で並べ替え、TOP2 を使用して最後の 2 つの値を取り出して比較します。トラバーサルとは何の関係もありません)、存在する場合は ID を 24 時間ロックします。返事です
------解決策---------

SQL コード
SELECT *,count(DISTINCT(投稿時刻の最初の8桁)) AS 回 FROM テーブル GROUP BY id
<br><font color="#e78608">------解決策---------</font><br>テーブルから著者 ID、投稿時刻を選択<br> a<br>WHERE (NOT EXISTS<br> (SELECT 著者 ID<br> FROM テーブル b<br> WHERE b. 著者 ID = a. 著者 ID AND b. 投稿時間 > a. 投稿時間) )<br> ORDER BY 著者ID、投稿時間 DESC
<br><font color="#e78608">------解決策---------</font><br>
ログイン後にコピー
SQL コード
declare @t table([著者ID] int,[投稿時刻] datetime)
@tに挿入
選択 11、'08-01-01 15:00 ' 結合
選択 12、'08-01-01 16:00 ' 結合
選択 13、'08-01-01 17:00 ' 結合
選択 12、'08-01-01 18:00 ' 結合
12、'08-01-02 16:00 ' を選択してください


select id,count(*)as [投稿数] from (
[著者 ID] による @t グループの ID として [著者 ID] を選択し、
CONVERT (varchar(10),[投稿時刻],120)) T.id による T グループ
<br><font color="#e78608">------解決策---------</font><br>テーブルから cnt,ID として count(ID) を選択しますここで、 str_date="xxxx-xx-xx" は ID 順にグループ化され、cnt 順に並べられます。
<br><font color="#e78608">------解決策---------</font><br>テーブルから著者 ID、投稿時刻を選択 <br> a <br>WHERE (NOT EXISTS <br> (SELECT 著者 ID <br> FROM テーブル b <br> WHERE b. 著者 ID = a. 著者 ID AND b. 投稿時間 > a. 投稿時間) ) <br> ORDER BY 著者 ID、投稿時刻 DESC <div class="clear"></div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート