ホームページ >バックエンド開発 >PHPチュートリアル >PHP は期間に基づいて毎日のデータをクエリします

PHP は期間に基づいて毎日のデータをクエリします

WBOY
WBOYオリジナル
2016-06-23 13:24:282003ブラウズ

次に、指定された日付内の毎日のデータをクエリする必要があります。何か良い方法はありますか?


ディスカッションへの返信 (解決策)

まず、データベースには日付を保存するフィールドが必要で、その後、統計を日付ごとにグループ化します。

まず、データベースには日付を保存するフィールドが必要で、統計を日付ごとにグループ化します。


こんにちは、私のデータベースは日付フィールドを UNIX タイムスタンプの形式で保存していますが、開始時刻と終了時刻を指定すると、毎日のデータを個別に確認するにはどうすればよいでしょうか。

タイムスタンプのグループ化は、最初に日付変換関数を使用して日付に変換してからグループ化する方が面倒ですが、これは設計中に日付フィールドを追加するのが最善です。

まだよく理解できていないので詳しく説明してもらえますか?

たとえば、タイムスタンプを保存するフィールドが t の場合、次のようにデータをカウントできます
SELECT COUNT(*) AS n,FROM_UNIXTIME(`t`,'%y)。 -$m-%d' ) AS d FROM `tb` GROUP BY d ORDER BY d
ただし、この効率は非常に低く、挿入時に日付を計算するのが最善です。

select id,FROM_UNIXTIME(timeField, '%Y%m%d') as time from tableName where FROM_UNIXTIME(timeField, '%Y%m%d')=20150920

こんにちは、「日付を挿入するときに計算されます」 「データベースがデータを保存するときに、2015-10-08 などの形式で保存される日付を指します。

現在取得しているのは、期間の開始時刻と終了時刻です。まずこの期間を日ごとに配列に保存してから、その日のデータに対して「毎日」クエリを実行する必要がありますか?

こんにちは、「挿入時に日付を計算する」とは、データベースがデータを保存するときに、2015-10-08 のような形式で保存されることを意味しますか?

現在取得しているのは、期間の開始時刻と終了時刻です。まずこの期間を日ごとに配列に保存してから、その日のデータに対して「毎日」クエリを実行する必要がありますか?

はい、挿入時に日付形式が保存されます。
開始時刻と終了時刻がある場合は、クエリ時に大なり小なり比較演算子を使用するだけです。データの量が多い場合は、毎日定期的に書き込んで整理し、新しいテーブルに保存する方がはるかに高速です。
<?php ///$ary为该时间区间下所有的数据foreach($ary as $k=>$v){	$datas['day_'.date('md',$v['timestamp'])][]=$v;//分组		}var_dump($datas['day_0809'])//为8月9号那天所有数据;?>

こんにちは、「挿入時に日付を計算する」とは、データベースがデータを保存するときに、2015-10-08 のような形式で日付を保存することを意味しますか?
現在取得しているのは、期間の開始時刻と終了時刻です。まずこの期間を日ごとに配列に保存してから、その日のデータに対して「毎日」クエリを実行する必要がありますか?

はい、挿入時に日付形式が保存されます。
開始時刻と終了時刻がある場合は、クエリ時に大なり小なり比較演算子を使用するだけです。データの量が多い場合は、毎日定期的に書き込んで整理し、新しいテーブルに保存する方がはるかに高速です。
分かりました、ありがとうございます!

rreee


オイル3g!
タイムスタンプにはタイムスタンプの利点があります


タイムスタンプにはデータ統合に php を使用できます

こんにちは、私もそう思います。タイムスタンプと日付の形式を使用するのがより適切な場合は、よくわかりました。


PHP データ統合は少量のデータに適しています。100 万個のデータがある場合、どれくらいのメモリと帯域幅を消費しますか? 1億はどうでしょうか?


PHP データ統合は少量のデータに適しています。100 万個のデータがある場合、どれくらいのメモリと帯域幅を占有するでしょうか? 1億はどうでしょうか?

リソースの消費を最小限に抑えるために何ができるでしょうか?


各データベースの日付と時刻の関数は異なります
大規模なデータベースまたは分散データベースにアップグレードする予定がある場合は、日付と時刻のタイプのフィールドを使用しないでください
UNIX タイムスタンプを使用すると、ほとんどの問題を回避できます 日付と時刻の関数に関するトラブル



select *,from_unixtime(addtime, '%Y%m%d') as d from table where from_unixtime(addtime,'%Y%m%d')>=20150101 and from_unixtime( addtime,'%Y %m%d')<=20150201;

$d1 = strtotime('2015-01-01');
$d2 = strtotime('2015-02-01');
$sql = "select * from tbl_name where field between $d1 and $d2"

查询时没有了格式转换,自然效率要高很多

数据库存时间戳就挺好的 不用改  你查询的条件  可以把给的制定日期变成时间戳再去查库啊

多谢各位的回答,不但解决了我的问题还让我学到了更多的知识,非常感谢!!!

数据库存时间戳就挺好的 不用改  你查询的条件  可以把给的制定日期变成时间戳再去查库啊


数据库中保存的是时间戳,如果是要以每天为单位查询出一段时间每天的数据就不大方便了吧。
数据库表(时间字段应该是时间戳格式,为了便于显示直接写成date格式):
      时间          |          种类       |   数量
2015-10-14                 1      20 
2015-10-14                  2      15 
2015-10-14                  3      35 
2015-10-15                  3      35 

要如下结果:
      时间          |          销售种类总数
2015-10-14                 3
2015-10-15                  1

这没有什么

select 时间戳, sum(数量) from 表 group by floor(时间戳/86400)

这没有什么

select 时间戳, sum(数量) from 表 group by floor(时间戳/86400)


哇,还能这样用,受教了,多谢!!!
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。