2011-10-21 4 views
0

データベース内に2つのテーブルがありますので、「トレーニング」と「演習」です。ワークアウトには、エクササイズと呼ばれる行が含まれています。この行は、エクササイズIDのカンマ区切りリストです。 '1,2,3'テーブル内の1行を取得するクエリと、その行で参照される別のテーブルの多くの行

私の質問では、トレーニングテーブルから行を選択する1つのIDを持つ1つの列を選択し、MySQLがその行のリストから各演習をフェッチするようにすることはできますかそれらは「運動」行の中にありますか?

現時点では、私は運動の行を選択し、それぞれの練習問題ごとに個別のリクエストを行い、結果として重大な非効率性をもたらすPHPを使用しています。

私はJoining rows as array from another table for each rowを見て、group_concat()関数についていくつか調査しましたが、それは私が後にしていることではありません。

更新 ここでは2つのテーブルです: enter image description here

+1

スキーマを再設計し、 'exercises_workouts'(または同様のもの)という相互参照テーブルを作成します。 CSVフィールドを捨てます。それは、あなたが解決するのに役立つデータベースの穀物に逆らっています。 – webbiedave

+0

フィールド 'workoutid'と 'exerciseid'だけがあり、そこから行くテーブルがありますか? –

+0

はい。 http://www.tonymarston.net/php-mysql/many-to-many.html – webbiedave

答えて

0

IMO、最善のアプローチは、相互参照表がexercises_workouts(または同様のもの)と呼ばれる持っているあなたのスキーマを再設計することです。 CSVフィールドを削除します。

http://www.tonymarston.net/php-mysql/many-to-many.html

注:

はここで多対多の関係を実装する上でより詳細に入るのページのリンク先のページはmysql_ *関数を使用しますが、アプローチの一般的な説明が立っています。あなたはデータベースへのアクセスのためにPDOを調べたいと思うでしょう。

+0

私のデータベースのERDを引き出して、私の以前の解決策がどれほど愚かであるかを少し分かりました:) –

関連する問題