私は、ユーザーがさまざまな都市で投稿したり商品を販売したりできるCraigslistに似たサイトで作業しています。私のサイトとCraigslistの違いの1つは、ページにすべての都市をリストする代わりに、郵便番号で検索できることです。
私はすでに、各都市のすべての都市、州、緯度、経度、および郵便番号情報を含む郵便番号データベースを持っています。さて、私が何をする必要があるのか、そして私が助けを必要としているのかを掘り下げるために:
私は郵便番号データベースを持っていますが、それは私の使用のために完全にセットアップされていません。(インターネットからhttp://zips.sourceforge.net/から無料でダウンロードしました)
データベース構造の設定についてサポートが必要です(たとえば、使用するテーブルの数やそれらをリンクする方法など)。
PHPとMySQLを使用します。
これらは、データベースのセットアップ方法に関するこれまでの私の考えです:(これが機能するかどうかはわかりませんが)。
シナリオ
誰かがホームページにアクセスすると、「郵便番号を入力してください」と表示されます。たとえば、「17241」と入力した場合、この郵便番号はペンシルベニア州にあるニュービルという名前の都市のものです。現在のデータベース設定では、クエリは次のようになります。
SELECT city FROM zip_codes WHERE zip = 17241;
クエリの結果は「Newville」になります。私が今ここで見ている問題は、彼らがサイトのニュービルセクションに何かを投稿したいときです。ニュービル市の投稿のためだけにテーブル全体を設定する必要があります。42,000を超える都市があります。つまり、42,000を超えるテーブル(各都市に1つ)が必要になるため、そのようにするのは非常識です。
私が考えていた方法の1つは、郵便番号データベースに「city_id」という列を追加することでした。これは、各都市に割り当てられた一意の番号になります。たとえば、ニュービル市のcity_idは83になります。したがって、誰かがニュービル市にリストを投稿した場合、もう1つのテーブルのみが必要になります。もう1つのテーブルは、次のように設定されます。
CREATE TABLE postings (
posting_id INT NOT NULL AUTO_INCREMENT,
for_sale LONGTEXT NULL,
for_sale_date DATETIME NULL,
for_sale_city_id INT NULL,
jobs LONGTEXT NULL,
jobs_date DATETIME NULL,
jobs_city_id INT NULL,
PRIMARY KEY(posting_id)
);
(for_saleおよびjob_列名は、ユーザーがリストできる投稿のタイプのカテゴリーです。これら2つだけではなく、さらに多くのカテゴリーがありますが、これは単なる例です。)
したがって、誰かがWebサイトにアクセスして、販売ではなく購入するものを探している場合、たとえば、郵便番号17241を入力できます。これは、実行されるクエリです。
SELECT city, city_id FROM zip_codes WHERE zip = 17241; //Result: Newville 83
(私はPHPを使用して、ユーザーがSESSIONSとCookieに入力した郵便番号を保存し、サイト全体でそれらを記憶します)
これで、「カテゴリを選択してください」と表示されます。カテゴリ「販売アイテム」を選択した場合、これは結果を実行およびソートするためのクエリです。
SELECT posting_id, for_sale, for_sale_date FROM postings WHERE for_sale_city_id = $_SESSION['zip_code'];
だから今私の質問は、これはうまくいくでしょうか?きっとそうなると思いますが、これを設定したくなくて、何かを見落としていて、最初からやり直さなければならないことに気づきました。