1

私はこのような4つのテーブルを持っています:

mysql> describe courses;
+-----------------+-------------+------+-----+---------+----------------+
| Field           | Type        | Null | Key | Default | Extra          |
+-----------------+-------------+------+-----+---------+----------------+
| course_id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| course_name     | varchar(75) | YES  |     | NULL    |                |
| course_price_id | int(11)     | YES  | MUL | NULL    |                |
+-----------------+-------------+------+-----+---------+----------------+

mysql> describe pricegroups;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| price_id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| price_name  | varchar(255) | YES  |     | NULL    |                |
| price_value | int(11)      | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+

mysql> describe courseplans;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| plan_id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| plan_name  | varchar(255) | YES  |     | NULL    |                |
| plan_time  | int(11)      | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

mysql> describe course_to_plan;
+-----------+---------+------+-----+---------+-------+
| Field     | Type    | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| course_id | int(11) | NO   | PRI | NULL    |       |
| plan_id   | int(11) | NO   | PRI | NULL    |       |
+-----------+---------+------+-----+---------+-------+

私が持っていることとやりたいことを説明してみましょう...

私のすべてのコース(course_id)には異なるステップ(plan_id)があり、1日以上の値があります(plan_time)。

コースには1つ以上のステップがあります(course_to_plan

コースは価格グループに接続されています(price_id)。

MySQLデータベースにクエリを実行して、出力を取得したいと思います。、、の
値、およびの値との値に基づいて、次のような結果が得られます。course_nameplan_idprice_idplan_time

+------------+--------------+------------+---------+
| course_name| pricegroup   | plan_time  | RESULT  | 
+------------+--------------+------------+---------+
| Math       | Expensive    | 7          | 3500    |
+------------+--------------+------------+---------+

あなたが私を理解してくれることを願っています...
私が持っている構造でさえ可能ですか、それとも私は何かを「再構築してやり直す」必要がありますか?

4

2 に答える 2

1

私があなたが必要としているものを理解しているかどうか見てみましょう:

SELECT c.course_name, pg.price_name, 
       COUNT(cp.plan_time), SUM(pg.price_value * cp.plan_time) AS result
FROM courses c 
INNER JOIN pricegroups pg ON c.course_price_id = pg.price_id
INNER JOIN course_to_plan ctp ON c.course_id = ctp.course_id
INNER JOIN courseplans cp ON ctp.plan_id = cp.plan_id
GROUP BY c.couse_name, pg.price_name
于 2012-06-04T20:02:37.280 に答える
1
SELECT c.course_name, p.price_name, SUM(cp.plan_time), SUM(cp.plan_time * p.price_value)
FROM courses c
    INNER JOIN pricegroups p        ON p.price_id = c.course_price_id
    INNER JOIN course_to_plan cpl   ON cpl.course_id = c.course_id
    INNER JOIN courseplans cp       ON cp.plan_id = cpl.plan_id
GROUP BY c.course_name, p.price_name

あなたの実装が間違っているように思われることに注意してください。データが欲しい方法で、価格のあるプランの方が幸せだと思うので、「高価」なプランと「安い」プランに同じ価格を適用しないでください。あなたは今やっています。しかし、私は本当に知りません、これは直感的です:-)

よろしくお願いします。

于 2012-06-04T20:06:11.210 に答える