0

さまざまな質問を検索しましたが、答えが見つかりませんでした。MySQL テーブル「teams」があります。

+--+----+------+
|id|name|active|
+--+----+------+
|1 |bla |1     |
|2 |blu |0     |
|3 |croc|1     |
|4 |bold|1     |
|5 |foo |1     |
|6 |bar |0     |
+--+----+------+

およびテーブル「データ」:

+----+-------+----+
|team|project|time|
+----+-------+----+
|2   |some   |1   |
|2   |some2  |5   |
|3   |one    |16  |
|3   |one2   |100 |
|5   |more   |2   |
|5   |more2  |60  |
+----+-------+----+

PHP では、次のようにデータをクエリしています。

SELECT t.name, t.active, d.time
FROM teams t
RIGHT JOIN data d ON (t.id = d.team)
ORDER BY t.id

すべてがうまく機能し、結果は次のようになります。

+----+------+----+
|name|active|time|
+----+------+----+
|blu |0     |1   |
|blu |0     |5   |
|croc|1     |16  |
|croc|1     |100 |
|foo |1     |2   |
|foo |1     |60  |
+----+------+----+

...しかし、結果が次のようになるようにしたい:

+----+------+---+---+
|name|active|t1 |t2 |
+----+------+---+---+
|blu |0     |1  |5  |
|croc|1     |16 |100|
|foo |1     |2  |60 |
+----+------+---+---+

それで...どうすればこれに到達できますか? すでに尋ねられた質問を見落としていないことを願っています... :(

どうもありがとうございました!

編集:まず、ありがとうございますが、何かを忘れていました...たとえば、one2が存在しない可能性もあります...

4

2 に答える 2

2

これを試して

 SELECT t.name, t.active, 
 min(time) t1, max(time)t2
FROM teams t
RIGHT JOIN data d ON (t.id = d.team)
group by name
ORDER BY t.id

デモはこちら

編集:

これを試して

   SELECT t.name, t.active, 
   min(time) t1, if  (  max(time) is not null and max(time) <> min(time) , max(time), null )t2
  FROM teams t
  RIGHT JOIN data d ON (t.id = d.team)
  group by name
  ORDER BY t.id

デモはこちら

于 2013-04-28T15:58:35.317 に答える
0

各チームに最大 2 つの行がある場合、次のようなものを使用します。

SELECT
  teams.name,
  teams.active,
  min(d1.time) t1,
  max(d2.time) t2
FROM
  teams INNER JOIN data d1
  ON teams.id=d1.team
  LEFT JOIN data d2
  ON teams.id=d2.team AND d1.time<d2.time
GROUP BY
  teams.name,
  teams.active
于 2013-04-28T16:35:21.547 に答える