2016-09-08 9 views
1

私は、多くの "多対多の"リレーションを持つ本当に大きなモデルを持っています。 検索結果を向上させるために多くのテーブルを使用してビューを作成しますが、ピボットテーブルのすべての値を1つのフィールドに読み込むことはできません。私が持っているものMySQLの1つのフィールドにピボットテーブルからのすべての値を含むビューを作成

:私は(擬似コードで)何をしたいです

CREATE OR REPLACE VIEW westates AS 
     SELECT 
      concat(estates.locale,estates.id) as code, 
      cities.name as city, 
      councils.name as council, 
      states.name as state, 
      countries.name as country, 
      concat(cities.name,' (',councils.name,')') as city_council, 
      estates.* 

     FROM estates 
      JOIN countries ON (estates.country_id = countries.id) 
      JOIN states  ON (estates.state_id = states.id) 
      JOIN councils ON (estates.city_council_id = councils.id) 
      JOIN cities  ON (estates.city_id = cities.id) 

CREATE OR REPLACE VIEW westates AS 
     SELECT 
      concat(estates.locale,estates.id) as code, 
      cities.name as city, 
      councils.name as council, 
      states.name as state, 
      countries.name as country, 
      concat(cities.name,' (',councils.name,')') as city_council, 
      estates.* 
      (SELECT all istallations from installations) as installations //and get all values from pivot table 

     FROM estates 
      JOIN countries ON (estates.country_id = countries.id) 
      JOIN states  ON (estates.state_id = states.id) 
      JOIN councils ON (estates.city_council_id = councils.id) 
      JOIN cities  ON (estates.city_id = cities.id) 
      JOIN estates_intallations ON (estates.id = estates_installations.estate_id) // this is the pivot table 

し、任意の形式のすべてのID "インストール" フィールドに取得する:

instatallationsコンテンツがかもしれません:

instatallations => "1 4 7 15"または "[1,4,7,15]"など

私はPHPでそれを行うことができますが、このビューを作成するために何千ものクエリを使わないで1つのクエリを使用する必要があります。 i...=...使用どんな条件の絆 `については

(最近聞かれるが、おそらくそれはincomprensible作る)

答えて

1

列があなたに1,4を与えるものは何でもinst_num使用について

(SELECT GROUP_CONCAT(inst_num) 
     FROM installations AS i 
     WHERE i... = ...) AS installations 

でサブクエリを置き換えなど
他のテーブルへのインストール。

(そしてカンマがありません)

0

Rick Jamesに感謝します。同じ問題を抱えている人(SQLの経験が少ない人)のために、私は答えを完成させたい。 Estatesのメインテーブルと、estates_extrasという名前のExtrasがあるピボットテーブルがあるとします。

table estates 
columns id, address 

table estates_extras 
columns estate_id, extra_id 

我々は持って眺めたい:すべての

table westates 
columns estates.id, estates.address, extras 
like 
    id  address   extras 
    25000 My nice road 1,5,8 

まず: 我々はDISTINCT含まれていない場合の要素が余分に持っているように、我々は、我々の見解で繰り返し同じ数の列を持っていますがこの例では(3人のエキストラ付き):

results 
    id  address   extras 
    25000 My nice road 1,5,8 
    25000 My nice road 1,5,8 
    25000 My nice road 1,5,8 

と左は、我々は、ほぼ1つの余分を持っていない団地の結果を持っていない登録しようとして、我々はJOINを追加しない場合。したがって、このクエリでは、すべてのエステートがあり、エキストラがある場合はコンマで区切られたリストが表示されます。

CREATE OR REPLACE VIEW westates AS 
    SELECT DISTINCT 
     estates.id, 
     estates.address, 
     (SELECT GROUP_CONCAT(estates_extras.extras_id) FROM estates_extras 
     WHERE estates_extras.estate_id = estates.id) AS extras 
    FROM estates 
    LEFT JOIN estates_extras ON (estates_extras.estates_id = estates.id) 
関連する問題