2012-01-10 7 views
1

Iは、MySQLデータベースの3つのテーブルを有する:クエリ正規化されたデータベース、3つのテーブル

  • 格納(PKのstores_id)
  • 状態(PKのstates_id)
  • join_stores_states(PKのJOIN_ID、FKのstores_id、FK states_idを)

"店舗"テーブルには、すべてのビジネスのための単一の行があります。 join_stores_statesテーブルは、個々のビジネスをそれぞれの状態にリンクします。したがって、3つの州にストアがあるため、join_stores_statesに3行、1州にストアがあるため、join_stores_statesには1行しかありません。

私が一列に各事業の一覧が表示されますクエリを記述、まだそれは中だすべての状態を表示する方法を把握しようとしている。

は、ここで明らかに私を与えている、私がこれまで持っているものですjoin_stores_statesのうちすべての行:

SELECT states.*, stores.*, join_stores_states.* 
FROM join_stores_states 
JOIN stores 
ON join_stores_states.stores_id=stores.stores_id 
JOIN states 
ON join_stores_states.states_id=states.states_id 

が緩く、これはそれが私に与えているものです:

  • 店1 |アラバマ
  • 店舗1 |フロリダ
  • 店舗1 |カンザス
  • 店舗2 |モンタナ
  • 店舗3 |ジョージア
  • 店舗3 |バーモント

これは私が見たいものの詳細です:

  • 店1 |アラバマ州、フロリダ州、カンザス
  • 店舗2 |モンタナ
  • 店舗3 | georgia、vermont

試してみるクエリメソッドについては、動作中のクエリと同じように評価してください。

+0

を私はそれはあなたが使用しているデータベースとバージョンのどのような味dublicate –

+3

あると思いますか?特定のベンダーのSQLに基づいたさまざまなソリューションがあります。 –

+0

これは便利かもしれません:http:// stackoverflow。com/questions/194852/concatenate-many-rows-into-a-single-text-string –

答えて

0

状態のリストが文字列として必要な場合は、次の例のように、MySQLのGROUP_CONCAT関数(または別のSQLダイアレクトを使用している場合は同等)を使用できます。別の状態を別途処理したい場合は、そうしたようにクエリを実行し、結果セットをより複雑な構造(配列のハッシュテーブル、最も簡単な手段として収集しますが、より複雑なOOデザインは確かに可能です)、結果の行を反復処理します。

SELECT stores.name, 
    GROUP_CONCAT(states.name ORDER BY states.name ASC SEPARATOR ', ') AS state_names 
FROM join_stores_states 
JOIN stores 
    ON join_stores_states.stores_id=stores.stores_id 
JOIN states 
    ON join_stores_states.states_id=states.states_id 
GROUP BY stores.name 

また、あなただけ連結した文字列ではなく、データ構造を必要とする場合でも、いくつかのデータベースは、とにかくクライアントの処理を行う必要があります。その場合には集計連結機能を持っていない可能性があります。擬似コードでは、あなたはどちらの言語を指定していなかったので:

perform query 
stores = empty hash 
for each row from query results: 
    get the store object from the hash by name 
    if the name isn't in the hash: 
    put an empty store object into the hash under the name 
    add the state name to the store object's stores array 
+0

のおかげで、これは私が行きたいところに向かっています。それは、最初の店舗だけをリストし、他の店舗に属するすべての単一の州をそれに入れることですが、これが始まりです。ありがとうございました – robbievasquez

+0

Doh、重要な部分( 'GROUP BY')を忘れました。今すぐやってみて下さい。 – Amadan

+0

それはそれをしました!ありがとう、ありがとう、それは完璧です。 – robbievasquez

関連する問題