2009-07-15 21 views
4

Iは3つのテーブルを有する:それは1500の町を有するMySQLの保管直列アレイ

  1. 地域表。
  2. カテゴリ1800カテゴリのテーブル。
  3. 企業ビジネスを含む表。私がする必要がどのよう

例Briminghamとカテゴリは、私たちの主な会社表を使ってビジネスを持っているので、私たちにはない配列に格納されている任意のカテゴリを持っていない配列内のリストについては、町をつかむですBriminghamにビジネスを持つ

私は問題は、格納されている配列のサイズです。シリアライズされた配列をすべての町に設定すると、ブラウズするテーブルを開くことさえできません。以下の配列の例を参照してください。

a:9:{s:8: "Bailiffs"; s:1: "1"; s:20: "ビジネスコンサルタント"; s:1: "1"; s:25 「ファッションアクセサリー」、「1:1」、「1:1」、「:ファッションアクセサリー」、「:ファッションアクセサリー」、「:ファッションアクセサリー」、 s:1: "1"; s:1: "1"; s:20: "郵便局サービス"; s:1: "1"; s:13: "学校の状態"; s: "1"; s:14: "Wood Craftsmen"; s:1: "1";}

誰かが代替ソリューションを提案できますか?

乾杯

+0

更新:シリアル化されたデータは大容量で、たとえばロンドンにはすべての1800カテゴリのビジネスがあり、静的なHTMlページを各タウンごとに作成できますが、1500のHTMlページが得られます。 誰かが、正しいHTMLページを見つけるまで、1500 HTMLページを調べなければならないサーバーの短所を知っていますか? –

答えて

8

私は完全にストレージの問題を取り除く全く異なるアプローチをお勧めしたい、とあなたのアプリをより効率的にする必要があります。とにかくデータベースから取得できる情報でいっぱいになる直列化された配列を格納することは、冗長で非常に非効率的です。ここでの最善のアプローチは、データを正規化することです。

あなたは、単純なルックアップテーブルとなり、おそらく「region_categoriesを」と呼ばれる第4テーブル、作成する必要があります。各町/地域のために、代わりに配列にすべてを保存するので、今

CREATE TABLE region_categories (
    regionId int unsigned not null, 
    categoryId int unsigned not null, 
    PRIMARY KEY(regionId,categoryId) 
); 

をあなたの代わりにすべきこの表にその町のカテゴリを設定します。あなたのデータサイズは非常に小さく、格納しているのはIDのペアです。

それは所与の領域のカテゴリを取得するための時間が来るとき、あなただけのシンプルなSELECTステートメントを実行する必要があります。

SELECT category.* 
FROM region_categories AS rc LEFT JOIN categories AS c ON rc.categoryId=c.categoryId 
WHERE rc.regionId=[whatever region you're dealing with] 

今、あなたはあなたの結果を反復処理することができ、あなたはすべてのカテゴリを持っていますその地域の

+0

感謝の答えは魅力を働かせます! –