3

Ivは次のテーブルを取得しました:

記事

+----+-------------+-----------------------------+--------------+
| ID | ID_group_AG | Title                       | Date_publish |
+----+-------------+-----------------------------+--------------+
|  1 |          10 | O obrotach sfer niebieskich | 2009-05-07   |
|  2 |          11 | Technologia betonu          | 2011-03-21   |
|  3 |          12 | test                        | 2008-01-13   |
+----+-------------+-----------------------------+--------------+

従業員

+----+-----------+-----------+
| ID | Name      | Surname   |
+----+-----------+-----------+
|  1 | Andrzej   | Gacek     |
|  2 | Leszek    | Ksiazek   |
|  3 | Krzysztof | Skibinski |
|  4 | Andrzej   | Inny      |
+----+-----------+-----------+

記事グループ

+----+----------+---------------+----------------+
| ID | ID_group | ID_employee   | Points         |
+----+----------+---------------+----------------+
|  1 |       10 |             1 |              3 |
|  2 |       10 |             3 |              3 |
|  3 |       11 |             1 |              2 |
|  4 |       11 |             2 |              2 |
|  5 |       11 |             4 |              2 |
|  6 |       12 |             4 |              6 |
+----+----------+---------------+----------------+

そして次の関係:

articles.ID_group_AG => articlesGroup.ID_group

articlesGroup.ID_employee => employee.ID

私がする必要があるのは、従業員、記事、および公開日に関連するすべての記事ポイントを印刷することです。そのため、次のクエリを使用します。

SELECT
  p.Name,
  p.Surname,
  a.Date_publish,
  ag.Points
FROM
  employee p,
  articles a,
  articlesGroup ag
WHERE
  (ag.ID_group = a.ID_group_AG) AND
  (ag.ID_employee = p.ID)

そして私は得る:

+-----------+-----------+--------------+----------------+
| Name      | Surname   | Date_publish | Points         |
+-----------+-----------+--------------+----------------+
| Andrzej   | Gacek     | 2009-05-07   |              3 |
| Andrzej   | Gacek     | 2011-03-21   |              2 |
| Leszek    | Ksiazek   | 2011-03-21   |              2 |
| Krzysztof | Skibinski | 2009-05-07   |              3 |
| Andrzej   | Inny      | 2011-03-21   |              2 |
| Andrzej   | Inny      | 2008-01-13   |              6 |
+-----------+-----------+--------------+----------------+

それでは、問題に取り掛かりましょう:)

グラフを作成するために pChart ライブラリを使用しています。

各従業員に関するすべての日付を X 軸に、Y 軸にポイントを配置したいと思います。

したがって、従業員「Andrzej Gacek」の Points 配列は [3,2] になります。

従業員「Krzysztof Skibinski」の場合: [3]

日付配列 (ソート済み): ["2008-01-13","2009-05-07","2011-03-21"]

exの従業員ポイント配列にゼロポイントを追加する必要があります。"Andrzej Gacek" の場合、配列は [0,3,2] のようになります。したがって、Point は Date と相関します。

ポイントにゼロを追加するクエリを作成して、クエリの出力が次のようになるようにする方法:

+-----------+-----------+--------------+----------------+
| Name      | Surname   | Date_publish | Points         |
+-----------+-----------+--------------+----------------+
| Andrzej   | Gacek     | 2009-05-07   |              3 |
| Andrzej   | Gacek     | 2011-03-21   |              2 |
| Andrzej   | Gacek     | 2008-01-13   |              0 |
| Leszek    | Ksiazek   | 2011-03-21   |              2 |
| Leszek    | Ksiazek   | 2009-05-07   |              0 |
| Leszek    | Ksiazek   | 2008-01-13   |              0 |
| Krzysztof | Skibinski | 2009-05-07   |              3 |
| Krzysztof | Skibinski | 2011-03-21   |              0 |
| Krzysztof | Skibinski | 2008-01-13   |              0 |
| Andrzej   | Inny      | 2011-03-21   |              2 |
| Andrzej   | Inny      | 2008-01-13   |              6 |
| Andrzej   | Inny      | 2009-05-07   |              0 |
+-----------+-----------+--------------+----------------+
4

1 に答える 1

3

探している結果を得るには、デカルト積を作成する必要があります。CROSS JOIN各従業員の日付を取得するために a を使用しました。

これを試してください:

SELECT DISTINCT E.Name,
  E.SurName,
  a.Date_Publish, 
  IFNULL(AG.Points,0) Points
FROM Articles A CROSS JOIN
  Employee E LEFT JOIN
  ArticlesGroup AG ON ag.ID_group = a.ID_group_AG 
    AND E.Id = ag.ID_employee

そして、ここにSQL Fiddleがあります。

于 2013-02-18T20:21:29.573 に答える