PHP プログラミングのヒント: 指定されたフィールドをインデックスとして含む配列データを返す

WBOY
リリース: 2016-06-23 14:37:52
オリジナル
947 人が閲覧しました

多くの場合、私たちは新しいプロジェクトに出会ってから開発が完了するまで、自分が書いたコードをじっくりと読み返します。その多くは以前に使いこなしたコードです。したがって、新しいプロジェクトを完了するたびに、プロジェクトの概要とコードの概要を適切に実行すると、将来のプロジェクトでそれを使用できるようになり、コードの最適化やより良いアイデア、より迅速な実装方法など、予期せぬ利益が得られる可能性が非常に高くなります。 。

優れたプログラム開発者を決定するのは、コードの量ではなく、コードの単純さと、複雑なロジックにもかかわらず実装の容易さである場合があります。これらは、プログラマーが優れたプログラマーであるかどうかを示す要素です。私たちは、昼も夜も夜遅くまで残業して、大量のコードを急いで書くプログラマーにはなりたくないのです。

このブログでは、いくつかの PHP プログラミング スキルを共有します。スキルの中には、他の人のコードを見て学んだものと、私自身が要約したものがあります。

特定のフィールドをインデックスとして使用して、データベースからフェッチしたデータ配列を返します

例を挙げると簡単です:

他の Web サイトからの指定されたサイトのトラフィックをカウントし、そのための小さなバックエンドを作成するとします。各ウェブサイトの毎日の受信トラフィック状況を確認します。まず 2 つのデータ テーブルを構築します:

テーブル 1、サイト構成テーブル (これらの Web サイトのトラフィックのみをカウントします)

CREATE TABLE `site_config` (  `id` smallint(5) unsigned NOT NULL auto_increment COMMENT '主键,自增',  `sid` smallint(5) unsigned NOT NULL COMMENT '网站ID',  `site_url` varchar(128) NOT NULL COMMENT '网站URL地址',  `site_name` varchar(80) NOT NULL COMMENT '网站名称',  `add_time` timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT '添加时间',  PRIMARY KEY  (`id`),  UNIQUE KEY `adid` (`sid`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='站点配置表';
ログイン後にコピー

テーブル 2、サイト トラフィック統計テーブル (ユーザーごとに 1 つのレコード)

CREATE TABLE `site_stat` (  `id` int(11) unsigned NOT NULL auto_increment COMMENT '主键,自增',  `sid` smallint(5) unsigned NOT NULL COMMENT '网站ID',  `ip_address` varchar(32) NOT NULL COMMENT '用户IP', `add_time` timestamp NOT NULL default CURRENT_TIMESTAMP COMMENT '添加时间',  PRIMARY KEY  (`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='站点流量统计表' ;
ログイン後にコピー

site_config テーブルの読み取り操作は書き込み操作よりも大きく、タイプは MyISAM に設定され、site_stat テーブルの書き込み操作は読み取り操作よりも大きいため、テーブル タイプを InnoDB に設定します。 (これらはデータ設計時に考慮する必要があることであり、速度が大幅に向上します)。

トピックに戻り、テーブル site_config に複数のデータがある場合:

データ形式は次のとおりです: id、sid、site_url、add_time

1,200,baidu.com,2013-06-30 14: 20:00

2,201,google.com,2013-06-30 14:20:00

3,202,cnblogs.com,2013-06-30 14:20:00

4,203,codejia.net,2013-06 -30 14: 20:00

次のように、サイト トラフィック統計テーブル site_stat にいくつかのデータが生成されました:

データ形式は次のとおりです: id,sid,ip_address,add_time

1,200,167.87.32.4,2013-06 -30 14:40:00

2,200,192.168.11.56、2013-06-30 14:40:10

3,202,167.87.32.4、2013-06-30 14:40:10

4,202,192.16 8.11.56 、2013-06-30 14 :40:20

5.203.167.87.32.4,2013-06-30 14:40:20 4:40:31

バックグラウンドで実行する必要があるレポート形式は次のとおりです: 日付、Web サイト ID、Web サイト URL 、トラフィック数 (トラフィックのないサイトも表示される必要があり、トラフィックは 0 として表示されます)

日付に基づいて、テーブル site_stat sid group by と左結合テーブル site_config を考えることができますが、これは明らかにそうではありませんその方法をシェアします。

これを行うには 2 つの SQL を使用します。1 つはすべてのサイトを取得することで、もう 1 つは指定された日付のサイトのトラフィック統計を取得することです。

すべてのサイトを取得する SQL1:

SELECT sid,site_url,site_name FROM site_config
ログイン後にコピー

サイト統計を取得する SQL2 (今日の場合):

SELECT sid,COUNT(1) AS come_total FROM site_stat              WHERE add_time>='2013-06-30 00:00:00'              AND add_time<='2013-06-30 23:59:59'GROUP BY sid
ログイン後にコピー

前に述べたことの多くは、将来への道を切り開く、フィールドを共有するというものです。インデックス付けの場合、2 次元配列を返すメソッド:

protected function getList($sql,$filed = null){        $res = mysql_query($sql,$this->link_sc);        $data = array();        if($filed === null){            while($row = mysql_fetch_assoc($res)){                $data[] = $row;            }        }else{            while($row = mysql_fetch_assoc($res)){                $data[$row[$filed]] = $row;            }        }        return $data;    }
ログイン後にコピー

SQL とインデックス付けが必要なフィールドを渡すと、フィールドが渡されることが前提となります。 select によって返されるフィールドに存在する必要があります。

すべてのサイトを取得するときに過去のフィールドを渡す必要はありませんが、サイトのトラフィック統計を取得するときに、次のようにサイト sid を渡します:

$sites = getList($sql1);  //所有站点$data = getList($sql2,'sid');  //站点流量数据,以sid为索引返回二维数组
ログイン後にコピー

最後に、レポートを表示するときに、foreach ループを使用します。 $ sites は、トラフィックを取得するときに、配列 $data に移動し、インデックス sid を持つデータを取得します。

とても便利でマスターしやすいので、よく使います。

最後に、上の表の統計結果レポートを見てください:

形式は次のとおりです: 日付、Web サイト ID、Web サイト URL、トラフィック数

2013-06-30,200,baidu.com,3

2013-06-30,201 ,google.com,0

2013-06-30,202,cnblogs.com,3

2013-06-30,203,codejia.net,1

要約: これほど多くのことを書くことは、そのような小さなスキルを示しているだけのようです。ただし、このテクニックを過小評価しないでください。時間を大幅に節約できます。そのため、皆さんもコードを書くときにもっとまとめて、ブログパークに来てみんなとコミュニケーションを取りながら学んでいけば、あなたのプログラミングレベルは確実に早く上がります!

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート