質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

5751閲覧

Amazon APIを使用したランキング取得の際のデータベースへの保存について

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2015/06/01 07:58

こんにちは。
今回は、Amazon Apiを使用して商品の売れ筋ランキングを取得してデータベースに保存する際のことについて質問させて頂きたいと思います。
私の考えた解決法が一番下にありますので、そちらが正しいか、もし間違っているまたは修正の余地があればそこを教えて頂きたいという趣旨の質問です。

###環境
使用言語 PHP
API Amazon API(商品の売れ筋ランキングを取得)
データベース MYSQL
テーブル amazon_data
フィールド id, asin, title, price, img_url, created

###状況
現在PHPでAmazon Apiを使用してランキング取得をしてその情報をデータベースに保存し、データベースから取得した情報をサイトに表示というシステムを作っています。
amazonのサイトに書いてあるのを見ますと、Amazonのランキングは1時間毎に更新されるようなので、できれば1時間毎に私のサイトの表示内容も変えたいと思っています。

その際、サイトに表示する内容は、私のデータベースに保存されている情報を使用しているので、1時間毎にデータベースを更新する形になると思うのですが、この時、具体的にデータベースに対してどのような処理をするのが適切なのかが分からなかったので、ここの皆さんに何かアドバイスを頂ければと思い投稿させて頂きました。

###私の考えた解決法は
(本というカテゴリの中で売れ筋ランキングを上位10件取得したと仮定します。)

その10件の情報をデータベースに保存し、次の1時間後に再度cronなどで取得するときに、データベースには追加でさらに10件保存していきます。
(最初の10件はid 110, 次の10件はid 1120のように。)

サイトに表示する内容は直近1時間以内のランキングを表示したいので、テーブルにcreatedなどを指定しておいて、1時間以内の情報を取得できるかと思います。このままではデータベースにひたすら保存していくだけで肥大化していきますので、何日かに一度データベースの古いデータは自動削除できると良いかと思っています。

上記が私が唯一思いついた方法なのですが、この方法で問題ないのでしょうか?
もし問題があるなら、どこを直せば良いか、他に適切な方法は何かをご教授いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

自分自身はAmazon APIに詳しくないのですが、
ご提示頂いている情報で自分ならこうするという部分を書きたいと思います。
テーブルamazon_dataのPRIMARY KEYはIdのみかと思いますが、
自分であれば処理時間(テーブル登録時間)を追加します。
で、Idは連番では無く、順位として利用します。
こうすることにより、その処理時間でのランキングが明確になりますので、
createdの項目は削除します。

こういった内容でよかったのか不安です。
ご参考になれば幸いです。

投稿2015/06/01 08:10

編集2015/06/01 08:12
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/06/01 08:53

unishakooooさん、早速の回答ありがとうございます! ここでの処理時間というのは、よく使われるフィールド名で言うとmodifiedなどのようなものでしょうか? あと、idを順位として使うということは、ある商品が1位でデータベースに登録されたとして、1時間後に2位になった場合、そこが上書きされてmodifiedの部分も最新の時間に更新されるという理解で間違いないでしょうか? すいません、知識不足のために理解できていない所があるかもしれませんが、教えて頂けますとありがたいです。
退会済みユーザー

退会済みユーザー

2015/06/01 13:18

お返事遅くなりすいません。 modifiedというのに私はあまり馴染みがないのですが、 下記の図のようなイメージになります。 insert_date_time Id ----------------------------------------- 2015-06-01 22:00 1 ←22:00 の処理で登録された1位 2015-06-01 22:00 2 ←22:00 の処理で登録された2位 2015-06-01 22:00 3 ←22:00 の処理で登録された3位 2015-06-01 23:00 1 ←23:00 の処理で登録された1位 2015-06-01 23:00 2 ←23:00 の処理で登録された2位 2015-06-01 23:00 3 ←23:00 の処理で登録された3位 処理のたびに常に新しいレコードをINSERTしてやるイメージです。 こうすることにより、最新はもちろん、過去に遡ってランキングを出してやるようなことも可能になります。 後始末として、古いinsert_date_timeのものを削除してやるいった処理も行いやすいのではないでしょうか。
退会済みユーザー

退会済みユーザー

2015/06/02 03:16

unishakooooさん、お返事ありがとうございます! 示して頂いた図で理解できました! なるほど、このようなやり方は知りませんでした。 これから実装するにあたり参考にさせて頂きたいと思います。 この度はありがとうございました!!^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問