2017-11-16 18 views
0

私は販売のために実際の状態のデータベースを作成する必要があります。問題は種類のプロパティです:私は家を持っている場合、私は種類の説明がありますが、それは土地だけの場合、説明はバスルームの数、領域、フロント範囲などを含む必要はありません値に応じて複数のテーブルを持つMysql内部結合

私は住所、価格などの要素(imoveis)に関する一般的なデータを持つテーブルを作成しました。私は要素のカテゴリ(imoveis_categs)よりも作成しました。私は5つのカテゴリを作成しました。各カテゴリには、その種類の特定の機能を備えたテーブル(例:imoveis_descr2)があります。

データを入力するのは簡単ですが、データをリストするには、クエリ選択を実行していくつかのフィルタに基づいてそれらの要素を見つける必要があります。 PHPでは簡単に解決することができますが、大量のデータとユーザーの要求に対するパフォーマンスが不思議です。 SQLコマンドで解決する方がいいと思っています。しかし、MySQLは、右記述テーブルにimoveisポイントの「categ」フィールド私の領域ではない、私が開始するには、このようなものを想像して...

SELECT * FROM imoveis INNER JOIN imoveis_descr(imoveis.categ) ... 

。このようなことは可能ですか?それを行うためには、より適切で効率的な別の方法がありますか?

EDIT:例を明確にしようとしました... EDIT2:例を修正しましたが、「部屋」の列は同じになります。フィールドは排他的なものではなく、アパートとハウスカテゴリの両方に部屋数があります。

Table imoveis 
id categ title   price  address ... 
1 2  The House  $ 1000000 Somestreet 77 
2 1  An Appartment $ 500000 Somewhere 11 
3 4  A Land   $ 250000 Nowhere 33 

Table imoveis_descr1 
idImovel rooms area floor ... 
2   2  70  5 

Table imoveis_descr2 
idImovel rooms fieldArea constrArea ... 
1   3  120  80 

Table imoveis_descr4 
idImovel area width height ... 
3   2640 22  120 

Result 
id categ title  price  address rooms fieldArea constrArea area floor  area width height 
1  2  The House $ 1000000 Somestreet 77 3 120 80 null null null null null 
2 1 An Appartment $ 500000 Somewhere 11 2 null null 70 5 null null null 
3 4 A Land $ 250000 Nowhere 33 null null null null null 2640 22 120 
+1

あなたの質問は、適切なデータサンプルと期待される結果を追加更新。 – scaisEdge

+0

私はしようとしますが、不規則で大きなテーブルですが、テキストエリアに置くのは簡単ではありません。 – Gustavo

答えて

1

あなたのフィールド名の一部があなたの結果(例えば「部屋」)に複製されている(これらは相互に排他的な表示される)、COALESCEとそれらのフィールドをマージする方が良いのではないでしょうか?あなたが参照テーブルとして

あなたはINNER JOINで必要な結果を得ることはありません、相互に排他的である、あなたはOUTER JOINをする必要があります:

SELECT 
     i.id, 
     i.categ, 
     i.title, 
     i.price, 
     i.address, 
     COALESCE(i1.rooms, i2.rooms) AS rooms, 
     i2.fieldArea, 
     i2.constrArea 
     COALESCE(i1.area, i3.area, ...) AS area, 
     ... 
FROM imoveis AS i 
     LEFT OUTER JOIN imoveis_descr1 AS i1 ON i1.idImovel = i.id 
     LEFT OUTER JOIN imoveis_descr2 AS i2 ON i2.idImovel = i.id 
     LEFT OUTER JOIN imoveis_descr3 AS i3 ON i3.idImovel = i.id 
     ... 
+0

部屋と重複フィールドに問題はなく、アパートや家屋でも同じことを意味します。私はこの例では間違っていました。しかし、あなたは正しい名前を「構築」するのではなく、すべての説明テーブルのINNER JOINを作成するために、問題に私を照らしました... – Gustavo

関連する問題